From 24d0bdcae62c7808ba70592cbdca137d5049523a Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 05:07:43 +0000 Subject: [PATCH 001/100] feat: add webapi response changes as of 2026-05-19 --- json-logs/raw/audit/v1/actions.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index bbad38fd2..47aebc1dd 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -518,7 +518,15 @@ "agentforce_agent_metadata_updated", "agentforce_agent_slack_deleted", "child_app_auto_installed", - "child_app_auto_install_denied" + "child_app_auto_install_denied", + "child_app_auto_install_rule_created", + "child_app_manifest_created", + "child_app_manifest_updated", + "child_app_manifest_deleted", + "child_app_manifest_exported", + "app_mcp_server_added", + "app_mcp_server_updated", + "app_mcp_server_removed" ], "workflow_builder": [ "workflow_created", From dbbc0960f22bbaead545bf80c1bf42a9f86744df Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 18 May 2026 22:10:21 -0700 Subject: [PATCH 002/100] feat: add language property to Message model Co-Authored-By: Claude --- .../src/main/java/com/slack/api/model/Message.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/slack-api-model/src/main/java/com/slack/api/model/Message.java b/slack-api-model/src/main/java/com/slack/api/model/Message.java index 60741c1b9..ea991ddb1 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/Message.java +++ b/slack-api-model/src/main/java/com/slack/api/model/Message.java @@ -269,4 +269,16 @@ public static class AssistantAppThread { private AssistantAppThread assistantAppThread; private String streamingState; + + private Language language; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Language { + private String locale; + @SerializedName("is_reliable") + private boolean reliable; + } } From c68228be732214f2bddc68fddd55e45339b298b5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 18 May 2026 23:16:34 -0700 Subject: [PATCH 003/100] fix: use org admin token with team_id for Grid admin tests The workspace admin token no longer has access to the target workspace (T06M2FAFCF3). Switch helper/setup calls in admin API tests to use the org admin token with explicit team_id, which is required for org-level tokens calling workspace-scoped methods. Co-Authored-By: Claude --- json-logs/samples/api/admin.conversations.delete.json | 3 ++- .../samples/api/admin.conversations.getCustomRetention.json | 3 ++- json-logs/samples/api/admin.roles.addAssignments.json | 3 ++- json-logs/samples/api/admin.roles.removeAssignments.json | 3 ++- .../api/admin.teams.settings.setDefaultChannels.json | 3 ++- .../samples/api/admin.teams.settings.setDescription.json | 3 ++- .../api/admin.teams.settings.setDiscoverability.json | 3 ++- json-logs/samples/api/admin.teams.settings.setIcon.json | 3 ++- json-logs/samples/api/admin.teams.settings.setName.json | 3 ++- json-logs/samples/api/admin.users.session.invalidate.json | 3 ++- .../methods_admin_api/AdminApi_conversations_Test.java | 6 +++--- .../methods_admin_api/AdminApi_roles_Test.java | 5 +++-- .../methods_admin_api/AdminApi_teams_Test.java | 3 ++- .../methods_admin_api/AdminApi_users_Test.java | 2 +- 14 files changed, 29 insertions(+), 17 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.delete.json b/json-logs/samples/api/admin.conversations.delete.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.conversations.delete.json +++ b/json-logs/samples/api/admin.conversations.delete.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.getCustomRetention.json b/json-logs/samples/api/admin.conversations.getCustomRetention.json index 98d573c67..23269b78e 100644 --- a/json-logs/samples/api/admin.conversations.getCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.getCustomRetention.json @@ -4,5 +4,6 @@ "needed": "", "provided": "", "is_policy_enabled": false, - "duration_days": 12345 + "duration_days": 12345, + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.addAssignments.json b/json-logs/samples/api/admin.roles.addAssignments.json index c85fa68d7..6c20053af 100644 --- a/json-logs/samples/api/admin.roles.addAssignments.json +++ b/json-logs/samples/api/admin.roles.addAssignments.json @@ -8,5 +8,6 @@ } ], "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.removeAssignments.json b/json-logs/samples/api/admin.roles.removeAssignments.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.roles.removeAssignments.json +++ b/json-logs/samples/api/admin.roles.removeAssignments.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json +++ b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDescription.json b/json-logs/samples/api/admin.teams.settings.setDescription.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDescription.json +++ b/json-logs/samples/api/admin.teams.settings.setDescription.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json +++ b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setIcon.json b/json-logs/samples/api/admin.teams.settings.setIcon.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setIcon.json +++ b/json-logs/samples/api/admin.teams.settings.setIcon.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setName.json b/json-logs/samples/api/admin.teams.settings.setName.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setName.json +++ b/json-logs/samples/api/admin.teams.settings.setName.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.invalidate.json b/json-logs/samples/api/admin.users.session.invalidate.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.users.session.invalidate.json +++ b/json-logs/samples/api/admin.users.session.invalidate.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index f22f5937c..3d0cc11a5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -244,11 +244,11 @@ public void changeSharedChannels() throws Exception { } static String getOrCreatePrivateChannel() throws Exception { - List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r - .excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); + List privateChannels = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(orgAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index a3b677ae4..afec1a6e5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -54,8 +54,9 @@ public void listRoleAssignments() throws Exception { public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); - String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r - .user(userId).excludeArchived(true).limit(1) + String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); + String channelId = orgAdminMethodsAsync.usersConversations(r -> r + .user(userId).teamId(teamId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r .roleId("Rl0A") diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index b502341ea..ff8b80c42 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -136,7 +136,8 @@ public void teams_settings() throws Exception { AdminTeamsSettingsInfoResponse info = methodsAsync.adminTeamsSettingsInfo(r -> r.teamId(teamId)).get(); assertThat(info.getError(), is(nullValue())); - List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r + List channelIds = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId) .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) .limit(2) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index afb4ae959..397628b38 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req).get(); + UsersListResponse usersListResponse = slack.methodsAsync(orgAdminUserToken).usersList(req -> req.teamId(teamId)).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { From 0dafb707cc0047bb3529a0278dc4bc4acd46de82 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 18 May 2026 23:22:29 -0700 Subject: [PATCH 004/100] Revert "fix: use org admin token with team_id for Grid admin tests" This reverts commit c68228be732214f2bddc68fddd55e45339b298b5. --- json-logs/samples/api/admin.conversations.delete.json | 3 +-- .../samples/api/admin.conversations.getCustomRetention.json | 3 +-- json-logs/samples/api/admin.roles.addAssignments.json | 3 +-- json-logs/samples/api/admin.roles.removeAssignments.json | 3 +-- .../api/admin.teams.settings.setDefaultChannels.json | 3 +-- .../samples/api/admin.teams.settings.setDescription.json | 3 +-- .../api/admin.teams.settings.setDiscoverability.json | 3 +-- json-logs/samples/api/admin.teams.settings.setIcon.json | 3 +-- json-logs/samples/api/admin.teams.settings.setName.json | 3 +-- json-logs/samples/api/admin.users.session.invalidate.json | 3 +-- .../methods_admin_api/AdminApi_conversations_Test.java | 6 +++--- .../methods_admin_api/AdminApi_roles_Test.java | 5 ++--- .../methods_admin_api/AdminApi_teams_Test.java | 3 +-- .../methods_admin_api/AdminApi_users_Test.java | 2 +- 14 files changed, 17 insertions(+), 29 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.delete.json b/json-logs/samples/api/admin.conversations.delete.json index 6b6ba1fe1..1b3fc766f 100644 --- a/json-logs/samples/api/admin.conversations.delete.json +++ b/json-logs/samples/api/admin.conversations.delete.json @@ -2,6 +2,5 @@ "ok": false, "error": "", "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.getCustomRetention.json b/json-logs/samples/api/admin.conversations.getCustomRetention.json index 23269b78e..98d573c67 100644 --- a/json-logs/samples/api/admin.conversations.getCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.getCustomRetention.json @@ -4,6 +4,5 @@ "needed": "", "provided": "", "is_policy_enabled": false, - "duration_days": 12345, - "warning": "" + "duration_days": 12345 } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.addAssignments.json b/json-logs/samples/api/admin.roles.addAssignments.json index 6c20053af..c85fa68d7 100644 --- a/json-logs/samples/api/admin.roles.addAssignments.json +++ b/json-logs/samples/api/admin.roles.addAssignments.json @@ -8,6 +8,5 @@ } ], "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.removeAssignments.json b/json-logs/samples/api/admin.roles.removeAssignments.json index 6b6ba1fe1..1b3fc766f 100644 --- a/json-logs/samples/api/admin.roles.removeAssignments.json +++ b/json-logs/samples/api/admin.roles.removeAssignments.json @@ -2,6 +2,5 @@ "ok": false, "error": "", "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json index 89bf3960c..8d498f7d1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json +++ b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json @@ -7,6 +7,5 @@ ] }, "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDescription.json b/json-logs/samples/api/admin.teams.settings.setDescription.json index 6b6ba1fe1..1b3fc766f 100644 --- a/json-logs/samples/api/admin.teams.settings.setDescription.json +++ b/json-logs/samples/api/admin.teams.settings.setDescription.json @@ -2,6 +2,5 @@ "ok": false, "error": "", "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json index 6b6ba1fe1..1b3fc766f 100644 --- a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json +++ b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json @@ -2,6 +2,5 @@ "ok": false, "error": "", "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setIcon.json b/json-logs/samples/api/admin.teams.settings.setIcon.json index 89bf3960c..8d498f7d1 100644 --- a/json-logs/samples/api/admin.teams.settings.setIcon.json +++ b/json-logs/samples/api/admin.teams.settings.setIcon.json @@ -7,6 +7,5 @@ ] }, "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setName.json b/json-logs/samples/api/admin.teams.settings.setName.json index 6b6ba1fe1..1b3fc766f 100644 --- a/json-logs/samples/api/admin.teams.settings.setName.json +++ b/json-logs/samples/api/admin.teams.settings.setName.json @@ -2,6 +2,5 @@ "ok": false, "error": "", "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.invalidate.json b/json-logs/samples/api/admin.users.session.invalidate.json index 89bf3960c..8d498f7d1 100644 --- a/json-logs/samples/api/admin.users.session.invalidate.json +++ b/json-logs/samples/api/admin.users.session.invalidate.json @@ -7,6 +7,5 @@ ] }, "needed": "", - "provided": "", - "warning": "" + "provided": "" } \ No newline at end of file diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index 3d0cc11a5..f22f5937c 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -244,11 +244,11 @@ public void changeSharedChannels() throws Exception { } static String getOrCreatePrivateChannel() throws Exception { - List privateChannels = slack.methods(orgAdminUserToken).conversationsList(r -> r - .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); + List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r + .excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(orgAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index afec1a6e5..a3b677ae4 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -54,9 +54,8 @@ public void listRoleAssignments() throws Exception { public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); - String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); - String channelId = orgAdminMethodsAsync.usersConversations(r -> r - .user(userId).teamId(teamId).excludeArchived(true).limit(1) + String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r + .user(userId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r .roleId("Rl0A") diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index ff8b80c42..b502341ea 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -136,8 +136,7 @@ public void teams_settings() throws Exception { AdminTeamsSettingsInfoResponse info = methodsAsync.adminTeamsSettingsInfo(r -> r.teamId(teamId)).get(); assertThat(info.getError(), is(nullValue())); - List channelIds = slack.methods(orgAdminUserToken).conversationsList(r -> r - .teamId(teamId) + List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) .limit(2) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index 397628b38..afb4ae959 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(orgAdminUserToken).usersList(req -> req.teamId(teamId)).get(); + UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { From 122c17eced0dad14c99a6b44e58864837f612076 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 18 May 2026 23:24:59 -0700 Subject: [PATCH 005/100] Reapply "fix: use org admin token with team_id for Grid admin tests" This reverts commit 0dafb707cc0047bb3529a0278dc4bc4acd46de82. --- json-logs/samples/api/admin.conversations.delete.json | 3 ++- .../samples/api/admin.conversations.getCustomRetention.json | 3 ++- json-logs/samples/api/admin.roles.addAssignments.json | 3 ++- json-logs/samples/api/admin.roles.removeAssignments.json | 3 ++- .../api/admin.teams.settings.setDefaultChannels.json | 3 ++- .../samples/api/admin.teams.settings.setDescription.json | 3 ++- .../api/admin.teams.settings.setDiscoverability.json | 3 ++- json-logs/samples/api/admin.teams.settings.setIcon.json | 3 ++- json-logs/samples/api/admin.teams.settings.setName.json | 3 ++- json-logs/samples/api/admin.users.session.invalidate.json | 3 ++- .../methods_admin_api/AdminApi_conversations_Test.java | 6 +++--- .../methods_admin_api/AdminApi_roles_Test.java | 5 +++-- .../methods_admin_api/AdminApi_teams_Test.java | 3 ++- .../methods_admin_api/AdminApi_users_Test.java | 2 +- 14 files changed, 29 insertions(+), 17 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.delete.json b/json-logs/samples/api/admin.conversations.delete.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.conversations.delete.json +++ b/json-logs/samples/api/admin.conversations.delete.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.getCustomRetention.json b/json-logs/samples/api/admin.conversations.getCustomRetention.json index 98d573c67..23269b78e 100644 --- a/json-logs/samples/api/admin.conversations.getCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.getCustomRetention.json @@ -4,5 +4,6 @@ "needed": "", "provided": "", "is_policy_enabled": false, - "duration_days": 12345 + "duration_days": 12345, + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.addAssignments.json b/json-logs/samples/api/admin.roles.addAssignments.json index c85fa68d7..6c20053af 100644 --- a/json-logs/samples/api/admin.roles.addAssignments.json +++ b/json-logs/samples/api/admin.roles.addAssignments.json @@ -8,5 +8,6 @@ } ], "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.roles.removeAssignments.json b/json-logs/samples/api/admin.roles.removeAssignments.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.roles.removeAssignments.json +++ b/json-logs/samples/api/admin.roles.removeAssignments.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json +++ b/json-logs/samples/api/admin.teams.settings.setDefaultChannels.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDescription.json b/json-logs/samples/api/admin.teams.settings.setDescription.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDescription.json +++ b/json-logs/samples/api/admin.teams.settings.setDescription.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setDiscoverability.json +++ b/json-logs/samples/api/admin.teams.settings.setDiscoverability.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setIcon.json b/json-logs/samples/api/admin.teams.settings.setIcon.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.teams.settings.setIcon.json +++ b/json-logs/samples/api/admin.teams.settings.setIcon.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.teams.settings.setName.json b/json-logs/samples/api/admin.teams.settings.setName.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.teams.settings.setName.json +++ b/json-logs/samples/api/admin.teams.settings.setName.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.invalidate.json b/json-logs/samples/api/admin.users.session.invalidate.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.users.session.invalidate.json +++ b/json-logs/samples/api/admin.users.session.invalidate.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index f22f5937c..3d0cc11a5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -244,11 +244,11 @@ public void changeSharedChannels() throws Exception { } static String getOrCreatePrivateChannel() throws Exception { - List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r - .excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); + List privateChannels = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(orgAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index a3b677ae4..afec1a6e5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -54,8 +54,9 @@ public void listRoleAssignments() throws Exception { public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); - String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r - .user(userId).excludeArchived(true).limit(1) + String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); + String channelId = orgAdminMethodsAsync.usersConversations(r -> r + .user(userId).teamId(teamId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r .roleId("Rl0A") diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index b502341ea..ff8b80c42 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -136,7 +136,8 @@ public void teams_settings() throws Exception { AdminTeamsSettingsInfoResponse info = methodsAsync.adminTeamsSettingsInfo(r -> r.teamId(teamId)).get(); assertThat(info.getError(), is(nullValue())); - List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r + List channelIds = slack.methods(orgAdminUserToken).conversationsList(r -> r + .teamId(teamId) .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) .limit(2) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index afb4ae959..397628b38 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req).get(); + UsersListResponse usersListResponse = slack.methodsAsync(orgAdminUserToken).usersList(req -> req.teamId(teamId)).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { From 4f754c6a7416d5c92134b1a7c4d226e25ffb1290 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 19 May 2026 00:21:35 -0700 Subject: [PATCH 006/100] fix: add missing audit actions and fix conversations_Test cant_kick_self - Add ~100 missing audit action constants (LegalHold, SlackFirstCrm, MCP, AI actions) - Fix cant_kick_self by excluding userToken's own user from kick target selection Co-Authored-By: Claude --- .../java/com/slack/api/audit/Actions.java | 117 ++++++++++++++++++ .../test_with_remote_apis/audit/ApiTest.java | 14 +++ .../methods/conversations_Test.java | 3 + 3 files changed, 134 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 94b371537..387c0df5d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -277,6 +277,59 @@ private WorkspaceOrOrg() { public static final String search_query_audit_logs_export_deleted = "search_query_audit_logs_export_deleted"; public static final String audit_logs_ai_summary_generated = "audit_logs_ai_summary_generated"; public static final String search_query_audit_logs_max_rows_failure = "search_query_audit_logs_max_rows_failure"; + public static final String migration_bulk_email_process_completed = "migration_bulk_email_process_completed"; + public static final String migration_bulk_user_resolutions_uploaded = "migration_bulk_user_resolutions_uploaded"; + public static final String migration_bulk_user_resolutions_undone = "migration_bulk_user_resolutions_undone"; + public static final String migration_bulk_user_resolutions_upload_failed = "migration_bulk_user_resolutions_upload_failed"; + public static final String data_deletion_date_changed = "data_deletion_date_changed"; + public static final String slack_ai_message_explanation_generated = "slack_ai_message_explanation_generated"; + public static final String quip_migration_org_mapping_deleted = "quip_migration_org_mapping_deleted"; + public static final String quip_migration_org_mapping_updated = "quip_migration_org_mapping_updated"; + public static final String salesforce_channels_retention_settings_synced = "salesforce_channels_retention_settings_synced"; + public static final String mcp_slack_read_canvas_tool_called = "mcp_slack_read_canvas_tool_called"; + public static final String mcp_slack_create_canvas_tool_called = "mcp_slack_create_canvas_tool_called"; + public static final String mcp_slack_update_canvas_tool_called = "mcp_slack_update_canvas_tool_called"; + public static final String mcp_slack_read_channel_tool_called = "mcp_slack_read_channel_tool_called"; + public static final String mcp_slack_read_thread_tool_called = "mcp_slack_read_thread_tool_called"; + public static final String mcp_slack_search_public_tool_called = "mcp_slack_search_public_tool_called"; + public static final String mcp_slack_search_channels_tool_called = "mcp_slack_search_channels_tool_called"; + public static final String mcp_slack_search_public_and_private_tool_called = "mcp_slack_search_public_and_private_tool_called"; + public static final String mcp_slack_search_users_tool_called = "mcp_slack_search_users_tool_called"; + public static final String mcp_slack_send_message_tool_called = "mcp_slack_send_message_tool_called"; + public static final String mcp_slack_read_user_profile_tool_called = "mcp_slack_read_user_profile_tool_called"; + public static final String mcp_slack_create_draft_tool_called = "mcp_slack_create_draft_tool_called"; + public static final String mcp_slack_create_draft_message_tool_called = "mcp_slack_create_draft_message_tool_called"; + public static final String mcp_slack_send_message_draft_tool_called = "mcp_slack_send_message_draft_tool_called"; + public static final String mcp_slack_schedule_message_tool_called = "mcp_slack_schedule_message_tool_called"; + public static final String mcp_slack_list_channel_members_tool_called = "mcp_slack_list_channel_members_tool_called"; + public static final String mcp_slack_mark_read_tool_called = "mcp_slack_mark_read_tool_called"; + public static final String mcp_slack_search_emojis_tool_called = "mcp_slack_search_emojis_tool_called"; + public static final String mcp_slack_add_reaction_tool_called = "mcp_slack_add_reaction_tool_called"; + public static final String mcp_slack_get_reactions_tool_called = "mcp_slack_get_reactions_tool_called"; + public static final String mcp_slack_create_conversation_tool_called = "mcp_slack_create_conversation_tool_called"; + public static final String mcp_slack_read_file_tool_called = "mcp_slack_read_file_tool_called"; + public static final String mcp_slack_get_workflow_details_tool_called = "mcp_slack_get_workflow_details_tool_called"; + public static final String mcp_slack_get_workflow_execution_status_tool_called = "mcp_slack_get_workflow_execution_status_tool_called"; + public static final String mcp_slack_canvas_find_replace_tool_called = "mcp_slack_canvas_find_replace_tool_called"; + public static final String mcp_slack_list_workflows_tool_called = "mcp_slack_list_workflows_tool_called"; + public static final String mcp_slack_run_workflow_tool_called = "mcp_slack_run_workflow_tool_called"; + public static final String slack_ai_mcp_tool_called = "slack_ai_mcp_tool_called"; + public static final String slack_ai_mcp_tool_permission_changed = "slack_ai_mcp_tool_permission_changed"; + public static final String slack_ai_mcp_connector_changed = "slack_ai_mcp_connector_changed"; + public static final String custom_tos_link_clicked = "custom_tos_link_clicked"; + public static final String prefs_setting_changed = "prefs_setting_changed"; + public static final String auth_policy_created = "auth_policy_created"; + public static final String auth_policy_entity_assigned = "auth_policy_entity_assigned"; + public static final String auth_policy_entity_removed = "auth_policy_entity_removed"; + public static final String slack_connect_guidelines_changed = "slack_connect_guidelines_changed"; + public static final String slack_connect_pref_set = "slack_connect_pref_set"; + public static final String slack_connect_pref_removed = "slack_connect_pref_removed"; + public static final String slack_connect_pref_migrated = "slack_connect_pref_migrated"; + public static final String pref_allow_cea_for_hippa_team_changed = "pref.allow_cea_for_hippa_team_changed"; + public static final String pref_slackbot_ai_canvas_write_enabled_changed = "pref.slackbot_ai_canvas_write_enabled_changed"; + public static final String pref_show_join_leave_changed = "pref.show_join_leave_changed"; + public static final String pref_show_join_leave_welcome_party_changed = "pref.show_join_leave_welcome_party_changed"; + public static final String pref_allow_slack_ai_changed = "pref.allow_slack_ai_changed"; } public static class User { @@ -340,6 +393,15 @@ private User() { public static final String user_anomaly_event_response_allowlist_changed = "user_anomaly_event_response_allowlist_changed"; public static final String org_owner_created = "org_owner_created"; public static final String slackbot_ai_shareable_prompt_created = "slackbot_ai_shareable_prompt_created"; + public static final String user_merged = "user_merged"; + public static final String slack_ai_calendar_read = "slack_ai_calendar_read"; + public static final String slack_ai_calendar_create = "slack_ai_calendar_create"; + public static final String slack_ai_calendar_update = "slack_ai_calendar_update"; + public static final String slackbot_ai_canvas_approval_bypassed = "slackbot_ai_canvas_approval_bypassed"; + public static final String slack_ai_skill_invoked = "slack_ai_skill_invoked"; + public static final String slack_ai_skill_metadata_updated = "slack_ai_skill_metadata_updated"; + public static final String slack_ai_skill_auto_enabled = "slack_ai_skill_auto_enabled"; + public static final String slack_ai_skill_auto_disabled = "slack_ai_skill_auto_disabled"; } public static class File { @@ -435,6 +497,8 @@ private Channel() { public static final String channel_detail_flag_unassignment = "channel_detail_flag_unassignment"; public static final String channel_detail_flag_moderated = "channel_detail_flag_moderated"; public static final String channel_detail_flag_dismissed = "channel_detail_flag_dismissed"; + public static final String channel_exclude_from_slack_ai_updated = "channel_exclude_from_slack_ai_updated"; + public static final String service_owner_transferred = "service_owner_transferred"; } public static class App { @@ -480,6 +544,16 @@ private App() { public static final String agentforce_agent_actions_updated = "agentforce_agent_actions_updated"; public static final String agentforce_agent_metadata_updated = "agentforce_agent_metadata_updated"; public static final String agentforce_agent_slack_deleted = "agentforce_agent_slack_deleted"; + public static final String child_app_auto_installed = "child_app_auto_installed"; + public static final String child_app_auto_install_denied = "child_app_auto_install_denied"; + public static final String child_app_auto_install_rule_created = "child_app_auto_install_rule_created"; + public static final String child_app_manifest_created = "child_app_manifest_created"; + public static final String child_app_manifest_updated = "child_app_manifest_updated"; + public static final String child_app_manifest_deleted = "child_app_manifest_deleted"; + public static final String child_app_manifest_exported = "child_app_manifest_exported"; + public static final String app_mcp_server_added = "app_mcp_server_added"; + public static final String app_mcp_server_updated = "app_mcp_server_updated"; + public static final String app_mcp_server_removed = "app_mcp_server_removed"; } public static class Message { @@ -597,6 +671,7 @@ private Subteam() { public static final String usergroup_section_updated = "usergroup_section_updated"; public static final String user_add_to_usergroup_failed = "user_add_to_usergroup_failed"; public static final String usergroup_anomaly_event_response_allowlist_changed = "usergroup_anomaly_event_response_allowlist_changed"; + public static final String user_bulk_upload_to_usergroup_started = "user_bulk_upload_to_usergroup_started"; } public static class AccountTypeRole { @@ -629,6 +704,10 @@ private WorkflowV2() { public static final String workflow_trigger_permission_added = "workflow_trigger_permission_added"; public static final String workflow_trigger_permission_removed = "workflow_trigger_permission_removed"; public static final String workflow_trigger_suspicious_keyword = "workflow_trigger_suspicious_keyword"; + public static final String workflow_ai_answer_suspicious_prompt = "workflow_ai_answer_suspicious_prompt"; + public static final String external_auth_oauth2_token_fetched = "external_auth_oauth2_token_fetched"; + public static final String external_auth_oauth2_token_refreshed = "external_auth_oauth2_token_refreshed"; + public static final String external_auth_oauth2_token_deleted = "external_auth_oauth2_token_deleted"; } public static class Canvas { @@ -662,6 +741,9 @@ private Canvas() { public static final String canvas_converted_to_standalone = "canvas_converted_to_standalone"; public static final String canvas_quip_migration_undone = "canvas_quip_migration_undone"; public static final String slack_ai_canvas_content_generated = "slack_ai_canvas_content_generated"; + public static final String canvas_slack_ai_exclusion_enabled = "canvas_slack_ai_exclusion_enabled"; + public static final String canvas_slack_ai_exclusion_disabled = "canvas_slack_ai_exclusion_disabled"; + public static final String canvas_share_limit_reached = "canvas_share_limit_reached"; } public static class Function { @@ -698,6 +780,7 @@ private NativeDlp() { public static final String native_dlp_rule_reactivated = "native_dlp_rule_reactivated"; public static final String native_dlp_rule_edited = "native_dlp_rule_edited"; public static final String native_dlp_rule_action_applied = "native_dlp_rule_action_applied"; + public static final String native_dlp_violation_deleted = "native_dlp_violation_deleted"; } public static class Template { @@ -756,5 +839,39 @@ private List() { public static final String list_restricted_sharing_disabled = "list_restricted_sharing_disabled"; public static final String list_rows_undeleted = "list_rows_undeleted"; public static final String list_default_view_updated = "list_default_view_updated"; + public static final String list_slack_ai_exclusion_enabled = "list_slack_ai_exclusion_enabled"; + public static final String list_slack_ai_exclusion_disabled = "list_slack_ai_exclusion_disabled"; + public static final String list_share_limit_reached = "list_share_limit_reached"; + } + + public static class LegalHold { + private LegalHold() { + } + + public static final String legal_hold_policy_created = "legal_hold_policy_created"; + public static final String legal_hold_policy_updated = "legal_hold_policy_updated"; + public static final String legal_hold_policy_released = "legal_hold_policy_released"; + public static final String legal_hold_policy_reactivated = "legal_hold_policy_reactivated"; + public static final String legal_hold_policy_entities_added = "legal_hold_policy_entities_added"; + public static final String legal_hold_policy_entities_deleted = "legal_hold_policy_entities_deleted"; + public static final String legal_hold_policy_exclusion_added = "legal_hold_policy_exclusion_added"; + public static final String legal_hold_policy_exclusion_deleted = "legal_hold_policy_exclusion_deleted"; + } + + public static class SlackFirstCrm { + private SlackFirstCrm() { + } + + public static final String contacts_import_initiated = "contacts_import_initiated"; + public static final String contacts_import_completed = "contacts_import_completed"; + public static final String contacts_import_failed = "contacts_import_failed"; + public static final String object_import_initiated = "object_import_initiated"; + public static final String object_import_completed = "object_import_completed"; + public static final String object_import_failed = "object_import_failed"; + public static final String field_created = "field_created"; + public static final String field_updated = "field_updated"; + public static final String field_visibility_updated = "field_visibility_updated"; + public static final String license_assigned = "license_assigned"; + public static final String license_removed = "license_removed"; } } diff --git a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java index c04a83c82..d9e2165e2 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java @@ -293,6 +293,18 @@ public void getActions_detectingNewOnes() throws IOException, AuditApiException fail("Unknown action detected - " + action); } } + List legalHoldNames = getAllPublicStaticFieldValues(Actions.LegalHold.class); + for (String action : actions.getLegalHold()) { + if (!legalHoldNames.contains(action)) { + fail("Unknown action detected - " + action); + } + } + List slackFirstCrmNames = getAllPublicStaticFieldValues(Actions.SlackFirstCrm.class); + for (String action : actions.getSlackFirstCrm()) { + if (!slackFirstCrmNames.contains(action)) { + fail("Unknown action detected - " + action); + } + } } @Test @@ -370,6 +382,8 @@ public void getLogs_all_actions() throws Exception { verifyAllActions(orgAdminUserToken, Actions.AppApprovalAutomationRule.class); verifyAllActions(orgAdminUserToken, Actions.SalesElevate.class); verifyAllActions(orgAdminUserToken, Actions.NativeDlp.class); + verifyAllActions(orgAdminUserToken, Actions.LegalHold.class); + verifyAllActions(orgAdminUserToken, Actions.SlackFirstCrm.class); // As all the properties are available in LogsResponse class, // we'll re-generate the sample JSON file. diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java index 6886b733d..c3b62493e 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/conversations_Test.java @@ -228,10 +228,13 @@ public void channelConversation() throws Exception { // Using async client to avoid an exception due to rate limited errors UsersListResponse usersListResponse = slack.methodsAsync().usersList(r -> r.token(botToken)).get(); + // Exclude the userToken's user to avoid cant_kick_self when kicking with userToken + String userTokenUserId = slack.methods().authTest(r -> r.token(userToken)).getUserId(); String invitee_ = null; for (User u : usersListResponse.getMembers()) { if (!"USLACKBOT".equals(u.getId()) && !u.isBot() + && !u.getId().equals(userTokenUserId) && !membersResponse.getMembers().contains(u.getId()) && !u.isRestricted() && !u.isUltraRestricted()) { From 4d9701003a233fc128ce8eea9e025cbac2b2787e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 19 May 2026 00:26:57 -0700 Subject: [PATCH 007/100] fix: remove duplicate pref_allow_slack_ai_changed field causing compilation failure Duplicate field in WorkspaceOrOrg class prevented Lombok annotation processing, breaking all Builder class generation in slack-api-client. Co-Authored-By: Claude --- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 - 1 file changed, 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 387c0df5d..c7b7b4cb6 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -329,7 +329,6 @@ private WorkspaceOrOrg() { public static final String pref_slackbot_ai_canvas_write_enabled_changed = "pref.slackbot_ai_canvas_write_enabled_changed"; public static final String pref_show_join_leave_changed = "pref.show_join_leave_changed"; public static final String pref_show_join_leave_welcome_party_changed = "pref.show_join_leave_welcome_party_changed"; - public static final String pref_allow_slack_ai_changed = "pref.allow_slack_ai_changed"; } public static class User { From 485af8fc33075a2a353f4361315e2704084b8579 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 07:47:19 +0000 Subject: [PATCH 008/100] feat: add webapi response changes as of 2026-05-19 --- .../api/admin.conversations.search.json | 18 ++++++++++++++---- .../api/admin.users.session.clearSettings.json | 3 ++- .../api/admin.users.session.getSettings.json | 3 ++- .../samples/api/admin.users.session.reset.json | 3 ++- .../api/admin.users.session.resetBulk.json | 3 ++- .../api/admin.users.session.setSettings.json | 3 ++- json-logs/samples/api/conversations.leave.json | 3 ++- .../samples/api/conversations.rename.json | 3 ++- json-logs/samples/api/users.conversations.json | 3 ++- 9 files changed, 30 insertions(+), 12 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.search.json b/json-logs/samples/api/admin.conversations.search.json index b3f7e2a29..6aa9bad34 100644 --- a/json-logs/samples/api/admin.conversations.search.json +++ b/json-logs/samples/api/admin.conversations.search.json @@ -115,14 +115,18 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { "type": "", "label": "", - "id": "" + "id": "", + "data": { + "folder_bookmark_id": "" + } } ], "tabz": [ @@ -132,12 +136,18 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { - "type": "" + "type": "", + "id": "", + "label": "", + "data": { + "folder_bookmark_id": "" + } } ], "meeting_notes": { diff --git a/json-logs/samples/api/admin.users.session.clearSettings.json b/json-logs/samples/api/admin.users.session.clearSettings.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.clearSettings.json +++ b/json-logs/samples/api/admin.users.session.clearSettings.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.getSettings.json b/json-logs/samples/api/admin.users.session.getSettings.json index 3f552a7da..35ce8f65c 100644 --- a/json-logs/samples/api/admin.users.session.getSettings.json +++ b/json-logs/samples/api/admin.users.session.getSettings.json @@ -12,5 +12,6 @@ ], "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.reset.json b/json-logs/samples/api/admin.users.session.reset.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.reset.json +++ b/json-logs/samples/api/admin.users.session.reset.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.resetBulk.json b/json-logs/samples/api/admin.users.session.resetBulk.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.resetBulk.json +++ b/json-logs/samples/api/admin.users.session.resetBulk.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.users.session.setSettings.json b/json-logs/samples/api/admin.users.session.setSettings.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.users.session.setSettings.json +++ b/json-logs/samples/api/admin.users.session.setSettings.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/conversations.leave.json b/json-logs/samples/api/conversations.leave.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/conversations.leave.json +++ b/json-logs/samples/api/conversations.leave.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/conversations.rename.json b/json-logs/samples/api/conversations.rename.json index 2d4151d66..7df54a8d6 100644 --- a/json-logs/samples/api/conversations.rename.json +++ b/json-logs/samples/api/conversations.rename.json @@ -52,5 +52,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 0230f312c..1c5152d3f 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -125,7 +125,8 @@ "file_id": "F00000000" }, "is_dormant": false, - "use_case": "" + "use_case": "", + "has_slack_connect_invite_created": false } } ], From 49460fcb12f593947146214e5692f933a487e3a6 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 00:41:20 +0000 Subject: [PATCH 009/100] feat: add webapi response changes as of 2026-05-22 --- json-logs/raw/audit/v1/actions.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index 47aebc1dd..cc1532e32 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -318,7 +318,9 @@ "slack_connect_guidelines_changed", "slack_connect_pref_set", "slack_connect_pref_removed", - "slack_connect_pref_migrated" + "slack_connect_pref_migrated", + "slack_ai_mcp_resource_read", + "slack_ai_mcp_message_sent" ], "user": [ "custom_tos_accepted", From 2b40739ecf3bfe82af3a5dacee3dd608645a93db Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sat, 23 May 2026 00:38:20 +0000 Subject: [PATCH 010/100] feat: add webapi response changes as of 2026-05-23 --- json-logs/raw/audit/v1/actions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index cc1532e32..e4ff40a33 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -320,7 +320,8 @@ "slack_connect_pref_removed", "slack_connect_pref_migrated", "slack_ai_mcp_resource_read", - "slack_ai_mcp_message_sent" + "slack_ai_mcp_message_sent", + "pref.allow_native_giphy_gif_picker" ], "user": [ "custom_tos_accepted", From 087418e9e5817f0143cbb89a6aa56497e4512180 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Thu, 28 May 2026 00:41:04 +0000 Subject: [PATCH 011/100] feat: add webapi response changes as of 2026-05-28 --- json-logs/samples/api/users.conversations.json | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 1c5152d3f..d04432579 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -93,11 +93,7 @@ { "type": "", "label": "", - "id": "", - "data": { - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } + "id": "" } ], "tabz": [ @@ -112,13 +108,7 @@ "is_disabled": false }, { - "type": "", - "id": "", - "data": { - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - }, - "label": "" + "type": "" } ], "meeting_notes": { From 67352912520715e8ff58a29f7457e67e377da983 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 1 Jun 2026 15:04:46 -0700 Subject: [PATCH 012/100] chore: add latest logs and configuration --- .../api/admin.auth.policy.assignEntities.json | 3 ++- .../samples/api/admin.auth.policy.getEntities.json | 3 ++- .../api/admin.auth.policy.removeEntities.json | 3 ++- json-logs/samples/api/users.conversations.json | 14 ++++++++++++-- .../api/users.discoverableContacts.lookup.json | 3 ++- .../src/main/java/com/slack/api/audit/Actions.java | 1 + .../com/slack/api/audit/response/LogsResponse.java | 2 +- 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/json-logs/samples/api/admin.auth.policy.assignEntities.json b/json-logs/samples/api/admin.auth.policy.assignEntities.json index a8ccb3108..b0b6114bd 100644 --- a/json-logs/samples/api/admin.auth.policy.assignEntities.json +++ b/json-logs/samples/api/admin.auth.policy.assignEntities.json @@ -3,5 +3,6 @@ "entity_total_count": 12345, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.auth.policy.getEntities.json b/json-logs/samples/api/admin.auth.policy.getEntities.json index 302f0e717..634e4f405 100644 --- a/json-logs/samples/api/admin.auth.policy.getEntities.json +++ b/json-logs/samples/api/admin.auth.policy.getEntities.json @@ -10,5 +10,6 @@ ], "entity_total_count": 12345, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.auth.policy.removeEntities.json b/json-logs/samples/api/admin.auth.policy.removeEntities.json index a8ccb3108..b0b6114bd 100644 --- a/json-logs/samples/api/admin.auth.policy.removeEntities.json +++ b/json-logs/samples/api/admin.auth.policy.removeEntities.json @@ -3,5 +3,6 @@ "entity_total_count": 12345, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index d04432579..1c5152d3f 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -93,7 +93,11 @@ { "type": "", "label": "", - "id": "" + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + } } ], "tabz": [ @@ -108,7 +112,13 @@ "is_disabled": false }, { - "type": "" + "type": "", + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + }, + "label": "" } ], "meeting_notes": { diff --git a/json-logs/samples/api/users.discoverableContacts.lookup.json b/json-logs/samples/api/users.discoverableContacts.lookup.json index 40d7dd188..c3c31ef6e 100644 --- a/json-logs/samples/api/users.discoverableContacts.lookup.json +++ b/json-logs/samples/api/users.discoverableContacts.lookup.json @@ -8,5 +8,6 @@ "" ] }, - "is_discoverable": false + "is_discoverable": false, + "warning": "" } \ No newline at end of file diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index c7b7b4cb6..771395274 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -316,6 +316,7 @@ private WorkspaceOrOrg() { public static final String slack_ai_mcp_tool_called = "slack_ai_mcp_tool_called"; public static final String slack_ai_mcp_tool_permission_changed = "slack_ai_mcp_tool_permission_changed"; public static final String slack_ai_mcp_connector_changed = "slack_ai_mcp_connector_changed"; + public static final String slack_ai_mcp_resource_read = "slack_ai_mcp_resource_read"; public static final String custom_tos_link_clicked = "custom_tos_link_clicked"; public static final String prefs_setting_changed = "prefs_setting_changed"; public static final String auth_policy_created = "auth_policy_created"; diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index d4fb6a70e..81c294cfd 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -222,7 +222,7 @@ public static class WorkflowV2StepConfiguration { private String name; // "Collect info in a form" private String stepFunctionType; // "Custom", "Builtin" private String stepFunctionAppId; // "A05QFAJ8LBA" - private String externalAuthConfiguration; + private java.util.List externalAuthConfiguration; } @Data From cf33fcf1b4df08c67fd2948fae9caf04fd2fc7d4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 1 Jun 2026 15:04:57 -0700 Subject: [PATCH 013/100] test: skip deprecated rtm test --- .../src/test/java/test_with_remote_apis/methods/rtm_Test.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java index a66609189..0f6ee97d6 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/rtm_Test.java @@ -305,6 +305,7 @@ public void handle(String message) { } + @Ignore // "method_deprecated" 2025-03-31 https://docs.slack.dev/changelog/2024-09-legacy-custom-bots-classic-apps-deprecation/ @Test public void ping_pong() throws Exception { From 16af091203622d874dfec232005af57c852bb8f0 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 00:45:42 +0000 Subject: [PATCH 014/100] feat: add webapi response changes as of 2026-06-02 --- json-logs/samples/api/users.conversations.json | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 1c5152d3f..d04432579 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -93,11 +93,7 @@ { "type": "", "label": "", - "id": "", - "data": { - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } + "id": "" } ], "tabz": [ @@ -112,13 +108,7 @@ "is_disabled": false }, { - "type": "", - "id": "", - "data": { - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - }, - "label": "" + "type": "" } ], "meeting_notes": { From af7fe5a86c8245b4521eb90a00eef47c1835d845 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 1 Jun 2026 22:11:19 -0700 Subject: [PATCH 015/100] chore: ignore generated example compilations --- bolt-spring-boot-examples/spring-boot-3/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 bolt-spring-boot-examples/spring-boot-3/.gitignore diff --git a/bolt-spring-boot-examples/spring-boot-3/.gitignore b/bolt-spring-boot-examples/spring-boot-3/.gitignore new file mode 100644 index 000000000..e660fd93d --- /dev/null +++ b/bolt-spring-boot-examples/spring-boot-3/.gitignore @@ -0,0 +1 @@ +bin/ From 108d84a7b635586a74034c261fcd8387ad0f07f4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Mon, 1 Jun 2026 22:17:40 -0700 Subject: [PATCH 016/100] test: expect unauthenticated requests from scim2 dummy tokens --- .../test_with_remote_apis/scim2/ApiTest.java | 18 +++++++++--------- .../scim2/AsyncApiTest.java | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java index d13bdd08c..1116a4f05 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/scim2/ApiTest.java @@ -111,10 +111,10 @@ public void searchUser_dummy() throws IOException { try { slack.scim2("dummy").searchUsers(req -> req.count(1000)); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -123,10 +123,10 @@ public void readUser_dummy() throws IOException { try { slack.scim2("dummy").readUser(req -> req.id("U12345678")); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -348,10 +348,10 @@ public void groups_dummy() throws IOException { try { slack.scim2("dummy").searchGroups(req -> req.count(1000)); } catch (SCIM2ApiException e) { - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } diff --git a/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java index c279236f3..d1b175469 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/scim2/AsyncApiTest.java @@ -115,10 +115,10 @@ public void searchUser_dummy() throws IOException, ExecutionException, Interrupt slack.scim2Async("dummy").searchUsers(req -> req.count(1000)).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -128,10 +128,10 @@ public void readUser_dummy() { slack.scim2Async("dummy").readUser(req -> req.id("U12345678")).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } @@ -378,10 +378,10 @@ public void groups_dummy() throws IOException, ExecutionException, InterruptedEx slack.scim2Async("dummy").searchGroups(req -> req.count(1000)).get(); } catch (Exception _e) { SCIM2ApiException e = ((SCIM2ApiCompletionException) _e.getCause()).getScimApiException(); - assertThat(e.getMessage(), is("status: 400, description: unsupported_version")); + assertThat(e.getMessage(), is("status: 401, description: invalid_authentication")); assertThat(e.getError(), is(notNullValue())); - assertThat(e.getError().getErrors().getCode(), is(400)); - assertThat(e.getError().getErrors().getDescription(), is("unsupported_version")); + assertThat(e.getError().getErrors().getCode(), is(401)); + assertThat(e.getError().getErrors().getDescription(), is("invalid_authentication")); } } From f667a547893fc49bb12afd16ecfa2e4fffeb471b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 00:07:44 -0700 Subject: [PATCH 017/100] fix: add missing properties and fix test stability - Add thread_ts, permissions (Object), privateChannelAccess fields - Add audit actions: slack_ai_mcp_resource_read, pref_allow_native_giphy_gif_picker - Fix dnd_Test: limit to 50 active users - Fix emoji_Test: create emoji before listing - Fix functions_Test: add teamId parameter - Fix users_Test: filter deleted users from lookupByEmail, use teamId for Grid - Update SCIM2 json-logs from test runs Co-Authored-By: Claude --- json-logs/samples/api/admin.emoji.add.json | 3 ++- .../samples/api/admin.emoji.addAlias.json | 3 ++- json-logs/samples/api/admin.emoji.remove.json | 3 ++- json-logs/samples/api/admin.emoji.rename.json | 3 ++- .../api/admin.functions.permissions.set.json | 3 ++- .../samples/api/users.conversations.json | 20 +++++++++++++++---- .../samples/api/users.lookupByEmail.json | 6 ++++-- json-logs/samples/scim/v2/Users.json | 8 -------- .../java/com/slack/api/audit/Actions.java | 2 ++ .../api/audit/response/LogsResponse.java | 12 ++++++++++- .../test_locally/api/audit/FieldsTest.java | 2 ++ .../methods/dnd_Test.java | 7 ++++++- .../methods/users_Test.java | 11 +++++++--- .../AdminApi_emoji_Test.java | 17 ++++++++-------- .../AdminApi_functions_Test.java | 3 +++ .../model/admin/AppFunctionPermissions.java | 1 + 16 files changed, 72 insertions(+), 32 deletions(-) diff --git a/json-logs/samples/api/admin.emoji.add.json b/json-logs/samples/api/admin.emoji.add.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.add.json +++ b/json-logs/samples/api/admin.emoji.add.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.addAlias.json b/json-logs/samples/api/admin.emoji.addAlias.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.addAlias.json +++ b/json-logs/samples/api/admin.emoji.addAlias.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.remove.json b/json-logs/samples/api/admin.emoji.remove.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.remove.json +++ b/json-logs/samples/api/admin.emoji.remove.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.emoji.rename.json b/json-logs/samples/api/admin.emoji.rename.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.emoji.rename.json +++ b/json-logs/samples/api/admin.emoji.rename.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.functions.permissions.set.json b/json-logs/samples/api/admin.functions.permissions.set.json index 8d498f7d1..89bf3960c 100644 --- a/json-logs/samples/api/admin.functions.permissions.set.json +++ b/json-logs/samples/api/admin.functions.permissions.set.json @@ -7,5 +7,6 @@ ] }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index d04432579..521ba1c7d 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -86,14 +86,19 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { "type": "", "label": "", - "id": "" + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + } } ], "tabz": [ @@ -103,12 +108,19 @@ "type": "", "data": { "file_id": "F00000000", - "shared_ts": "0000000000.000000" + "shared_ts": "0000000000.000000", + "folder_bookmark_id": "" }, "is_disabled": false }, { - "type": "" + "type": "", + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + }, + "label": "" } ], "meeting_notes": { diff --git a/json-logs/samples/api/users.lookupByEmail.json b/json-logs/samples/api/users.lookupByEmail.json index 4e2b45404..6f345d67c 100644 --- a/json-logs/samples/api/users.lookupByEmail.json +++ b/json-logs/samples/api/users.lookupByEmail.json @@ -48,7 +48,8 @@ "display_url": "", "unicode": "" } - ] + ], + "start_date": "" }, "is_admin": false, "is_owner": false, @@ -61,7 +62,8 @@ "has_2fa": false, "is_email_confirmed": false, "who_can_share_contact_card": "", - "is_invited_user": false + "is_invited_user": false, + "two_factor_type": "" }, "error": "", "needed": "", diff --git a/json-logs/samples/scim/v2/Users.json b/json-logs/samples/scim/v2/Users.json index 57d1122e7..a82097e86 100644 --- a/json-logs/samples/scim/v2/Users.json +++ b/json-logs/samples/scim/v2/Users.json @@ -36,10 +36,6 @@ } ], "photos": [ - { - "value": "https://www.example.com/", - "type": "" - }, { "value": "", "type": "" @@ -81,10 +77,6 @@ "manager": {} }, "groups": [ - { - "value": "S00000000", - "display": "" - }, { "value": "", "display": "" diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 771395274..3ed14b1f3 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -317,6 +317,7 @@ private WorkspaceOrOrg() { public static final String slack_ai_mcp_tool_permission_changed = "slack_ai_mcp_tool_permission_changed"; public static final String slack_ai_mcp_connector_changed = "slack_ai_mcp_connector_changed"; public static final String slack_ai_mcp_resource_read = "slack_ai_mcp_resource_read"; + public static final String slack_ai_mcp_message_sent = "slack_ai_mcp_message_sent"; public static final String custom_tos_link_clicked = "custom_tos_link_clicked"; public static final String prefs_setting_changed = "prefs_setting_changed"; public static final String auth_policy_created = "auth_policy_created"; @@ -330,6 +331,7 @@ private WorkspaceOrOrg() { public static final String pref_slackbot_ai_canvas_write_enabled_changed = "pref.slackbot_ai_canvas_write_enabled_changed"; public static final String pref_show_join_leave_changed = "pref.show_join_leave_changed"; public static final String pref_show_join_leave_welcome_party_changed = "pref.show_join_leave_welcome_party_changed"; + public static final String pref_allow_native_giphy_gif_picker = "pref.allow_native_giphy_gif_picker"; } public static class User { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 81c294cfd..5dc2c146a 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -72,6 +72,8 @@ public static class Entity { private InformationBarrier barrier; private WorkflowV2 workflowV2; private SlackList list; + private Object externalAuthOauth2Token; + private Object function; } @Data @@ -250,7 +252,7 @@ public static class Details { private String name; private String botId; private List channels; - private List permissions; + private Object permissions; private String sharedTo; // channel_workspaces_updated private String reason; @SerializedName("is_internal_integration") @@ -367,6 +369,14 @@ public static class Details { private String user; // list_access_added private String fileId; private String triggerId; // workflow_trigger_permission_set, workflow_trigger_permission_added + private Object triggerConfig; + private String permissionType; + private java.util.List channelIds; + private java.util.List userIds; + @SerializedName("is_slack_provided_template") + private Boolean slackProvidedTemplate; + private String templateTitle; + private String threadTs; } @Data diff --git a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java index f7d3db03e..8fa8f83af 100644 --- a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java @@ -36,7 +36,9 @@ public void logs() throws Exception { verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getEntity(), "getApp", "getEnterprise", + "getExternalAuthOauth2Token", "getFile", + "getFunction", "getUsergroup", "getChannel", "getMessage", diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java index c511e21c9..fb0dc7b53 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/dnd_Test.java @@ -52,7 +52,12 @@ public void dnd() throws Exception { { List users = new ArrayList<>(); for (User member : members) { - users.add(member.getId()); + if (!member.isDeleted()) { + users.add(member.getId()); + } + if (users.size() >= 50) { + break; + } } DndTeamInfoResponse response = slack.methods().dndTeamInfo(r -> r.token(botToken).users(users)); assertThat(response.getError(), is(nullValue())); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java index 1aef93f73..2eda46ddd 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/users_Test.java @@ -42,6 +42,7 @@ public class users_Test { String userToken = System.getenv(Constants.SLACK_SDK_TEST_USER_TOKEN); String enterpriseGridTeamAdminUserToken = System.getenv( Constants.SLACK_SDK_TEST_GRID_WORKSPACE_ADMIN_USER_TOKEN); + String gridTeamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); @BeforeClass public static void setUp() throws Exception { @@ -109,7 +110,7 @@ public void enterpriseGrid() throws Exception { if (enterpriseGridTeamAdminUserToken != null) { // Using async client to avoid an exception due to rate limited errors UsersListResponse users = slack.methodsAsync(enterpriseGridTeamAdminUserToken) - .usersList(r -> r.includeLocale(true).limit(10)).get(); + .usersList(r -> r.teamId(gridTeamId).includeLocale(true).limit(10)).get(); assertThat(users.getError(), is(nullValue())); UsersInfoResponse usersInfo = slack.methods(enterpriseGridTeamAdminUserToken) @@ -330,7 +331,7 @@ public void lookupByEmailSupported_bot() throws Exception { List users = usersListResponse.getMembers(); User randomUserWhoHasEmail = null; for (User user : users) { - if (user.getProfile() != null && user.getProfile().getEmail() != null) { + if (user.getProfile() != null && user.getProfile().getEmail() != null && !user.isDeleted()) { randomUserWhoHasEmail = user; break; } @@ -360,7 +361,7 @@ public void lookupByEmailSupported_user() throws Exception { List users = usersListResponse.getMembers(); User randomUserWhoHasEmail = null; for (User user : users) { - if (user.getProfile() != null && user.getProfile().getEmail() != null) { + if (user.getProfile() != null && user.getProfile().getEmail() != null && !user.isDeleted()) { randomUserWhoHasEmail = user; break; } @@ -416,6 +417,7 @@ public void usersConversations_EnterpriseGrid() throws Exception { while (cursor != "" && pageNum < 10) { UsersConversationsResponse conversations = slack.methods().usersConversations(r -> r .token(enterpriseGridTeamAdminUserToken) + .teamId(gridTeamId) .user(authTestResult.getUserId()) .types(Arrays.asList( ConversationType.PUBLIC_CHANNEL, @@ -465,6 +467,9 @@ public void scanAllUsers() throws Exception { UsersListResponse users = client.usersList(usersReq).get(); assertThat(users.getError(), is(nullValue())); for (User user : users.getMembers()) { + if (user.isDeleted()) { + continue; + } UsersInfoResponse userInfo = client.usersInfo(r -> r.user(user.getId()).includeLocale(true)).get(); assertThat(userInfo.getError(), is(nullValue())); // Requires https://docs.slack.dev/reference/scopes/users.read.email diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java index f2481f3c5..c0a5b1f85 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_emoji_Test.java @@ -33,23 +33,24 @@ public static void tearDown() throws InterruptedException { @Test public void emoji() throws Exception { if (orgAdminUserToken != null) { - CompletableFuture list = methodsAsync.adminEmojiList(r -> r.limit(100)); - AdminEmojiListResponse emoji = list.get(); - assertThat(emoji.getEmoji().isEmpty(), is(false)); - - Thread.sleep(3000); + String name = "java-" + System.currentTimeMillis(); + String url = "https://emoji.slack-edge.com/T03E94MJU/java/624937af2b22523e.png"; CompletableFuture creationError = methodsAsync.adminEmojiAdd(r -> r.name("test")); assertThat(creationError.get().getError(), is("invalid_arguments")); Thread.sleep(10000); - String name = "java-" + System.currentTimeMillis(); - String url = "https://emoji.slack-edge.com/T03E94MJU/java/624937af2b22523e.png"; - CompletableFuture creation = methodsAsync.adminEmojiAdd(r -> r.name(name).url(url)); assertThat(creation.get().getError(), is(nullValue())); + Thread.sleep(3000); + + CompletableFuture list = methodsAsync.adminEmojiList(r -> r.limit(100)); + AdminEmojiListResponse emoji = list.get(); + assertThat(emoji.getError(), is(nullValue())); + assertThat(emoji.getEmoji().isEmpty(), is(false)); + CompletableFuture aliasCreationError = methodsAsync.adminEmojiAddAlias(r -> r.name(name)); assertThat(aliasCreationError.get().getError(), is("invalid_arguments")); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java index 451649643..4ba8c4bc5 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java @@ -31,6 +31,7 @@ public static void tearDown() throws InterruptedException { } static String orgAdminUserToken = System.getenv(Constants.SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN); + static String gridTeamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); static AsyncMethodsClient methodsAsync = slack.methodsAsync(orgAdminUserToken); @Test @@ -39,6 +40,7 @@ public void adminFunctions() throws Exception { final List appIds = Arrays.asList(System.getenv(Constants.SLACK_SDK_TEST_GRID_APP_IDS).split(",")); AdminFunctionsListResponse response = methodsAsync.adminFunctionsList(r -> r .appIds(appIds) + .teamId(gridTeamId) .limit(1000) ).get(); assertThat(response.getError(), is(nullValue())); @@ -72,6 +74,7 @@ public void adminFunctions() throws Exception { final String _nextCursor = nextCursor; response = methodsAsync.adminFunctionsList(req -> req .appIds(appIds) + .teamId(gridTeamId) .limit(1000) .cursor(_nextCursor) ).get(); diff --git a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java index ff8c0e5e0..2cb3f6195 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java +++ b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java @@ -10,6 +10,7 @@ public class AppFunctionPermissions { private Distribution distribution; private AllowedEntities allowedEntities; private AllowedByAdmin allowedByAdmin; + private Object privateChannelAccess; @Data public static class Distribution { From d2b40f4104799ef3a3852bd38e202e235ab1f1bd Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:02:33 -0700 Subject: [PATCH 018/100] chore: json logs 2026-06-02 --- json-logs/samples/api/users.conversations.json | 12 +++++++----- json-logs/samples/scim/v2/Users.json | 4 ++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 521ba1c7d..924b7c5b0 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -92,10 +92,11 @@ "is_disabled": false }, { - "type": "", - "label": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" } @@ -114,13 +115,14 @@ "is_disabled": false }, { - "type": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" - }, - "label": "" + } } ], "meeting_notes": { diff --git a/json-logs/samples/scim/v2/Users.json b/json-logs/samples/scim/v2/Users.json index a82097e86..0efa034d5 100644 --- a/json-logs/samples/scim/v2/Users.json +++ b/json-logs/samples/scim/v2/Users.json @@ -77,6 +77,10 @@ "manager": {} }, "groups": [ + { + "value": "S00000000", + "display": "" + }, { "value": "", "display": "" From 058313ef9171b3bec06e5726c50a699115d39e07 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:02:57 -0700 Subject: [PATCH 019/100] feat: private channel access permissions --- .../slack/api/model/admin/AppFunctionPermissions.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java index 2cb3f6195..ad6406d7d 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java +++ b/slack-api-model/src/main/java/com/slack/api/model/admin/AppFunctionPermissions.java @@ -10,7 +10,7 @@ public class AppFunctionPermissions { private Distribution distribution; private AllowedEntities allowedEntities; private AllowedByAdmin allowedByAdmin; - private Object privateChannelAccess; + private PrivateChannelAccess privateChannelAccess; @Data public static class Distribution { @@ -32,4 +32,12 @@ public static class AllowedByAdmin { private String type; private List userIds; } + + @Data + public static class PrivateChannelAccess { + private String permission; + private List userIds; + private List teamIds; + private List orgIds; + } } From 794f8181bbfd43f3b952abd79652298e8dd6fdf1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:03:10 -0700 Subject: [PATCH 020/100] chore: audit log responses wip --- .../java/com/slack/api/audit/response/LogsResponse.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 5dc2c146a..60dd3c58b 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -377,6 +377,13 @@ public static class Details { private Boolean slackProvidedTemplate; private String templateTitle; private String threadTs; + private String status; + private String entityTeam; + @SerializedName("is_external_user") + private Boolean externalUser; + private String salesforceOrgId; + private String salesforceEdition; + private Object salesforceOrgConfig; } @Data From c69d0a033e1e1538f4c4879ad31ffbec34a656ff Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:25:56 -0700 Subject: [PATCH 021/100] fix: add salesforce_tenant_guid, affected_users to LogsResponse.Details Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 60dd3c58b..eda0abe7a 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -384,6 +384,8 @@ public static class Details { private String salesforceOrgId; private String salesforceEdition; private Object salesforceOrgConfig; + private String salesforceTenantGuid; + private Object affectedUsers; } @Data From 01134db94ea13b7ac6f13de7050320946140febf Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:35:14 -0700 Subject: [PATCH 022/100] fix: add provider_key to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index eda0abe7a..3a4c5fd62 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -386,6 +386,7 @@ public static class Details { private Object salesforceOrgConfig; private String salesforceTenantGuid; private Object affectedUsers; + private String providerKey; } @Data From 4cb34e8a2cc991b4276d537779d4ab614ef9c2fc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:45:29 -0700 Subject: [PATCH 023/100] fix: add policy_name to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 3a4c5fd62..74aba98b7 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -387,6 +387,7 @@ public static class Details { private String salesforceTenantGuid; private Object affectedUsers; private String providerKey; + private String policyName; } @Data From 3fda089a9565e51be90e1fa64dec6213a716f9d5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 02:55:43 -0700 Subject: [PATCH 024/100] fix: add authentication_mode to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 74aba98b7..3ad6e0e52 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -388,6 +388,7 @@ public static class Details { private Object affectedUsers; private String providerKey; private String policyName; + private String authenticationMode; } @Data From 8a89385a1dd782bb23fd80d8b7890cbb041274e9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 03:05:59 -0700 Subject: [PATCH 025/100] fix: add entity_ids to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 3ad6e0e52..38720f381 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -389,6 +389,7 @@ public static class Details { private String providerKey; private String policyName; private String authenticationMode; + private java.util.List entityIds; } @Data From 587f2ebb11638d7ff71cf04e352f9717e7e4acd4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 03:16:58 -0700 Subject: [PATCH 026/100] fix: entity_ids is sometimes string, use Object type Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 38720f381..2cd769afe 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -389,7 +389,7 @@ public static class Details { private String providerKey; private String policyName; private String authenticationMode; - private java.util.List entityIds; + private Object entityIds; } @Data From 0ed176830d39be51ab18291123946d5aa4642a79 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 03:27:23 -0700 Subject: [PATCH 027/100] fix: add pref_name to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 2cd769afe..06eda20ec 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -390,6 +390,7 @@ public static class Details { private String policyName; private String authenticationMode; private Object entityIds; + private String prefName; } @Data From 9dc33948ef744cef58db56e1675e64a9226431d9 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 03:38:47 -0700 Subject: [PATCH 028/100] fix: add email to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 06eda20ec..a785338eb 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -391,6 +391,7 @@ public static class Details { private String authenticationMode; private Object entityIds; private String prefName; + private String email; } @Data From 1e415c77051c1e2ac56ad3b6f697208304b1ef74 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 03:52:51 -0700 Subject: [PATCH 029/100] fix: add md5Hash to LogsResponse.Details Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index a785338eb..1a8d4f05f 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -392,6 +392,8 @@ public static class Details { private Object entityIds; private String prefName; private String email; + private Object md; + private String md5Hash; } @Data From ea4b7b6ae086b80e686e2223c3c3a03ccd625497 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 04:05:13 -0700 Subject: [PATCH 030/100] fix: add extShared to LogsResponse.Details Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 1a8d4f05f..a86bcd02e 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -394,6 +394,8 @@ public static class Details { private String email; private Object md; private String md5Hash; + @SerializedName("is_ext_shared") + private Boolean extShared; } @Data From d5461355b425b9fd316cc4debe331291fb51f8d1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 04:17:24 -0700 Subject: [PATCH 031/100] fix: add teamsSharedWith to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index a86bcd02e..62f03305b 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -396,6 +396,7 @@ public static class Details { private String md5Hash; @SerializedName("is_ext_shared") private Boolean extShared; + private List teamsSharedWith; } @Data From b48097689ccbae18e40f94b17f40c2381a550adc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 04:31:06 -0700 Subject: [PATCH 032/100] fix: add folderBookmarkId to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 62f03305b..b48fe5b1d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -397,6 +397,7 @@ public static class Details { @SerializedName("is_ext_shared") private Boolean extShared; private List teamsSharedWith; + private String folderBookmarkId; } @Data From 9c0b735823d28d62a7c031312d6e556c4d48c116 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 04:45:24 -0700 Subject: [PATCH 033/100] fix: add allowed to LogsResponse.Details Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index b48fe5b1d..6f2f5e241 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -398,6 +398,8 @@ public static class Details { private Boolean extShared; private List teamsSharedWith; private String folderBookmarkId; + @SerializedName("is_allowed") + private Boolean allowed; } @Data From e4f767c1fbe0229bb6414f88a1ea33d14b5f4f23 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 05:00:42 -0700 Subject: [PATCH 034/100] fix: add variableNames to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 6f2f5e241..9d79f5696 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -400,6 +400,7 @@ public static class Details { private String folderBookmarkId; @SerializedName("is_allowed") private Boolean allowed; + private List variableNames; } @Data From 8d7c44019be07bcab36f2df22cea8ced412cfc20 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 05:16:14 -0700 Subject: [PATCH 035/100] fix: add functionsAdded to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 9d79f5696..150d059be 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -401,6 +401,7 @@ public static class Details { @SerializedName("is_allowed") private Boolean allowed; private List variableNames; + private List functionsAdded; } @Data From 3572b3f09de32e99c099d3b886d1c00630ce16ed Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 05:31:40 -0700 Subject: [PATCH 036/100] fix: add workflowsAdded to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 150d059be..714fb3ab7 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -402,6 +402,7 @@ public static class Details { private Boolean allowed; private List variableNames; private List functionsAdded; + private List workflowsAdded; } @Data From 86e0902ddb13dfe8473433b1ea2ec088fc196d3d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 08:03:23 -0700 Subject: [PATCH 037/100] fix: add datastoresAdded to LogsResponse.Details Also adds inline comments to recently added fields. Co-Authored-By: Claude --- .../slack/api/audit/response/LogsResponse.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 714fb3ab7..b7e00dcab 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -393,16 +393,17 @@ public static class Details { private String prefName; private String email; private Object md; - private String md5Hash; + private String md5Hash; // file_shared @SerializedName("is_ext_shared") - private Boolean extShared; - private List teamsSharedWith; - private String folderBookmarkId; + private Boolean extShared; // channel sharing + private List teamsSharedWith; // channel sharing + private String folderBookmarkId; // bookmark_added @SerializedName("is_allowed") - private Boolean allowed; - private List variableNames; - private List functionsAdded; - private List workflowsAdded; + private Boolean allowed; // app_allowlist + private List variableNames; // app_manifest_created/updated + private List functionsAdded; // app_manifest_created/updated + private List workflowsAdded; // app_manifest_created/updated + private List datastoresAdded; // app_manifest_created/updated } @Data From cf6800b9c2351ce9bcfe760ee1ac6208f501e6c8 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 08:21:28 -0700 Subject: [PATCH 038/100] fix: remove speculative comments, update audit log samples Co-Authored-By: Claude --- json-logs/samples/audit/v1/logs.json | 38 ++++++++++++++++++- .../api/audit/response/LogsResponse.java | 18 ++++----- 2 files changed, 45 insertions(+), 11 deletions(-) diff --git a/json-logs/samples/audit/v1/logs.json b/json-logs/samples/audit/v1/logs.json index 82c7b9788..0995f5df2 100644 --- a/json-logs/samples/audit/v1/logs.json +++ b/json-logs/samples/audit/v1/logs.json @@ -121,7 +121,9 @@ }, "list": { "id": "" - } + }, + "external_auth_oauth2_token": {}, + "function": {} }, "context": { "session_id": "", @@ -396,7 +398,39 @@ "cell_date_updated": 123, "view_id": "", "user": "", - "file_id": "" + "file_id": "", + "trigger_id": "", + "trigger_config": {}, + "permission_type": "", + "channel_ids": [], + "user_ids": [], + "is_slack_provided_template": false, + "template_title": "", + "thread_ts": "", + "status": "", + "entity_team": "", + "is_external_user": false, + "salesforce_org_id": "", + "salesforce_edition": "", + "salesforce_org_config": {}, + "salesforce_tenant_guid": "", + "affected_users": {}, + "provider_key": "", + "policy_name": "", + "authentication_mode": "", + "entity_ids": {}, + "pref_name": "", + "email": "", + "md": {}, + "md5_hash": "", + "is_ext_shared": false, + "teams_shared_with": [], + "folder_bookmark_id": "", + "is_allowed": false, + "variable_names": [], + "functions_added": [], + "workflows_added": [], + "datastores_added": [] } } ] diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index b7e00dcab..18026f765 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -393,17 +393,17 @@ public static class Details { private String prefName; private String email; private Object md; - private String md5Hash; // file_shared + private String md5Hash; @SerializedName("is_ext_shared") - private Boolean extShared; // channel sharing - private List teamsSharedWith; // channel sharing - private String folderBookmarkId; // bookmark_added + private Boolean extShared; + private List teamsSharedWith; + private String folderBookmarkId; @SerializedName("is_allowed") - private Boolean allowed; // app_allowlist - private List variableNames; // app_manifest_created/updated - private List functionsAdded; // app_manifest_created/updated - private List workflowsAdded; // app_manifest_created/updated - private List datastoresAdded; // app_manifest_created/updated + private Boolean allowed; + private List variableNames; + private List functionsAdded; + private List workflowsAdded; + private List datastoresAdded; } @Data From d2744f73fd5a9fc0d3f0ef34c0d6ef20a58e9dc5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 09:52:22 -0700 Subject: [PATCH 039/100] fix: add whoCanDmAnyone to LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 18026f765..a00c34c2d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -404,6 +404,7 @@ public static class Details { private List functionsAdded; private List workflowsAdded; private List datastoresAdded; + private ConversationPref whoCanDmAnyone; } @Data From 180c8880fc17dc58f1dc48cf59e9def5dd725988 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 2 Jun 2026 10:19:59 -0700 Subject: [PATCH 040/100] fix: update admin.functions.permissions.set to use new permissions param The API now requires a `permissions` array parameter instead of the legacy `visibility`+`user_ids` params when the private channel access experiment is enabled. Co-Authored-By: Claude --- .../slack/api/methods/RequestFormBuilder.java | 3 +++ .../AdminFunctionsPermissionsSetRequest.java | 15 +++++++++++ .../AdminApi_functions_Test.java | 25 ++++++++++++++++--- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java index f088565df..77cb0e883 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java @@ -719,6 +719,9 @@ public static FormBody.Builder toForm(AdminFunctionsPermissionsSetRequest req) { if (req.getUserIds() != null) { setIfNotNull("user_ids", req.getUserIds().stream().collect(joining(",")), form); } + if (req.getPermissions() != null) { + setIfNotNull("permissions", GSON.toJson(req.getPermissions()), form); + } return form; } diff --git a/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java b/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java index 770c5115f..c976e91a5 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/request/admin/functions/AdminFunctionsPermissionsSetRequest.java @@ -1,8 +1,10 @@ package com.slack.api.methods.request.admin.functions; import com.slack.api.methods.SlackApiRequest; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.List; @@ -21,4 +23,17 @@ public class AdminFunctionsPermissionsSetRequest implements SlackApiRequest { private String functionId; private String visibility; // named_entities, everyone, no_one private List userIds; + private List permissions; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class Permission { + private String visibility; + private String permissionType; + private List userIds; + private List teamIds; + private List orgIds; + } } diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java index 4ba8c4bc5..b1204f936 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_functions_Test.java @@ -2,6 +2,7 @@ import com.slack.api.Slack; import com.slack.api.methods.AsyncMethodsClient; +import com.slack.api.methods.request.admin.functions.AdminFunctionsPermissionsSetRequest; import com.slack.api.methods.response.admin.functions.AdminFunctionsListResponse; import com.slack.api.methods.response.admin.functions.AdminFunctionsPermissionsLookupResponse; import com.slack.api.methods.response.admin.functions.AdminFunctionsPermissionsSetResponse; @@ -13,6 +14,7 @@ import org.junit.Test; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -53,18 +55,33 @@ public void adminFunctions() throws Exception { String userId = methodsAsync.authTest(r -> r).get().getUserId(); AdminFunctionsPermissionsSetResponse set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .userIds(Arrays.asList(userId)) - .visibility("named_entities") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("named_entities") + .permissionType("slack_function") + .userIds(Arrays.asList(userId)) + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .visibility("no_one") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("no_one") + .permissionType("slack_function") + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); set = methodsAsync.adminFunctionsPermissionsSet(r -> r .functionId(functionIds.get(0)) - .visibility("everyone") + .permissions(Collections.singletonList( + AdminFunctionsPermissionsSetRequest.Permission.builder() + .visibility("everyone") + .permissionType("slack_function") + .build() + )) ).get(); assertThat(set.getError(), is(nullValue())); From 3d16277e93784ef9c7378b127bcb97beda37cab4 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Wed, 3 Jun 2026 01:10:28 +0000 Subject: [PATCH 041/100] feat: add webapi response changes as of 2026-06-03 --- json-logs/raw/audit/v1/actions.json | 4 +++- .../samples/api/admin.barriers.create.json | 3 ++- .../samples/api/admin.barriers.delete.json | 3 ++- json-logs/samples/api/users.conversations.json | 18 +++--------------- json-logs/samples/audit/v1/logs.json | 6 +++++- 5 files changed, 15 insertions(+), 19 deletions(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index e4ff40a33..cf7590bb2 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -478,7 +478,9 @@ "channel_detail_flag_moderated", "channel_detail_flag_dismissed", "channel_exclude_from_slack_ai_updated", - "service_owner_transferred" + "service_owner_transferred", + "channel_restrict_guests_updated", + "channel_restrict_message_and_file_sharing_updated" ], "app": [ "app_installed", diff --git a/json-logs/samples/api/admin.barriers.create.json b/json-logs/samples/api/admin.barriers.create.json index c4afc37d8..31ac0714d 100644 --- a/json-logs/samples/api/admin.barriers.create.json +++ b/json-logs/samples/api/admin.barriers.create.json @@ -25,5 +25,6 @@ "" ], "date_update": 12345 - } + }, + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.barriers.delete.json b/json-logs/samples/api/admin.barriers.delete.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.barriers.delete.json +++ b/json-logs/samples/api/admin.barriers.delete.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 924b7c5b0..41378a138 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -92,14 +92,9 @@ "is_disabled": false }, { - "id": "", - "label": "", "type": "", - "data": { - "folder_bookmark_id": "", - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } + "label": "", + "id": "" } ], "tabz": [ @@ -115,14 +110,7 @@ "is_disabled": false }, { - "id": "", - "label": "", - "type": "", - "data": { - "folder_bookmark_id": "", - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } + "type": "" } ], "meeting_notes": { diff --git a/json-logs/samples/audit/v1/logs.json b/json-logs/samples/audit/v1/logs.json index 0995f5df2..5193b4615 100644 --- a/json-logs/samples/audit/v1/logs.json +++ b/json-logs/samples/audit/v1/logs.json @@ -430,7 +430,11 @@ "variable_names": [], "functions_added": [], "workflows_added": [], - "datastores_added": [] + "datastores_added": [], + "who_can_dm_anyone": { + "type": [], + "user": [] + } } } ] From 34c87770d3e0ae6d3c50ddc410d136d343104f4d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 00:14:55 -0700 Subject: [PATCH 042/100] chore: json logs 2026-06-03 --- json-logs/samples/api/admin.barriers.update.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/json-logs/samples/api/admin.barriers.update.json b/json-logs/samples/api/admin.barriers.update.json index f91c7c876..468f3b07f 100644 --- a/json-logs/samples/api/admin.barriers.update.json +++ b/json-logs/samples/api/admin.barriers.update.json @@ -20,5 +20,6 @@ "date_update": 12345 }, "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file From e6a0564a67c1cff59e6fa9adb6f660dc3e53e724 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 00:16:06 -0700 Subject: [PATCH 043/100] test: close auth proxy header client between configuration to avoid leaked resources --- .../test/java/test_with_remote_apis/AuthProxyHeadersTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java b/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java index 26f7184e4..607458eab 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java @@ -153,6 +153,7 @@ public void methods_system_properties() throws Exception { } // this should be rejected assertThat(callCount.get(), is(0)); + slack.close(); // verify if an invalid host given by system properties is reflected System.setProperty("http.proxyHost", "invalid-host"); @@ -162,6 +163,8 @@ public void methods_system_properties() throws Exception { fail("A connection failure is expected here"); } catch (IOException e) { } + assertThat(callCount.get(), is(0)); + slack.close(); // verify if the setProxyUrl is prioritized over the system properties config = new SlackConfig(); From 806bcd3bb892b5ea291ad7443052602ce81028f1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 00:24:32 -0700 Subject: [PATCH 044/100] test: gather analytics from recent channel test --- .../methods_admin_api/AdminApi_analytics_Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_analytics_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_analytics_Test.java index 6acfb553f..a75077eca 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_analytics_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_analytics_Test.java @@ -134,7 +134,7 @@ public void getFile_member_asBytes() throws Exception { public void getFile_public_channel() throws Exception { if (orgAdminUserToken != null) { AdminAnalyticsGetFileResponse response = methodsAsync.adminAnalyticsGetFile(r -> r - .date("2025-01-20") + .date("2026-06-01") .type("public_channel") ).get(); assertNull(response.getError()); @@ -170,7 +170,7 @@ public void getFile_public_channel() throws Exception { public void getFile_public_channel_validation() throws Exception { if (orgAdminUserToken != null) { AdminAnalyticsGetFileResponse response = methodsAsync.adminAnalyticsGetFile(r -> r - .date("2025-01-20") + .date("2026-06-01") .type("public_channel") ).get(); assertNull(response.getError()); From b2aa5d3d820da11d618c92acad93ca43137911c7 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 00:25:56 -0700 Subject: [PATCH 045/100] revert: keep team admin user token in tests after correct installation to workspace --- .../methods_admin_api/AdminApi_roles_Test.java | 2 +- .../methods_admin_api/AdminApi_teams_Test.java | 2 +- .../methods_admin_api/AdminApi_users_Test.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index afec1a6e5..bcc20e9f0 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -55,7 +55,7 @@ public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); - String channelId = orgAdminMethodsAsync.usersConversations(r -> r + String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r .user(userId).teamId(teamId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index ff8b80c42..45d0b74e6 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -136,7 +136,7 @@ public void teams_settings() throws Exception { AdminTeamsSettingsInfoResponse info = methodsAsync.adminTeamsSettingsInfo(r -> r.teamId(teamId)).get(); assertThat(info.getError(), is(nullValue())); - List channelIds = slack.methods(orgAdminUserToken).conversationsList(r -> r + List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r .teamId(teamId) .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index 397628b38..b09514e54 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(orgAdminUserToken).usersList(req -> req.teamId(teamId)).get(); + UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req.teamId(teamId)).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { From 8808626a32815f26036dde1889cb536901771f3d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 01:00:38 -0700 Subject: [PATCH 046/100] test: ignore audit log check for pref_who_can_manage_ext_shared_channels --- .../src/test/java/test_with_remote_apis/audit/ApiTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java index d9e2165e2..5f1dbe736 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/audit/ApiTest.java @@ -420,6 +420,7 @@ static void verifyAllActions(String token, Class clazz) throws Exception { } } + @Ignore // pref_who_can_manage_ext_shared_channels audit entries no longer generated @Test public void getLogs_issue_525() throws IOException, AuditApiException { From e5951262a9bdf73b851e88b1e9a5c545d2bebcb3 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 02:23:37 -0700 Subject: [PATCH 047/100] chore: json logs 2026-06-03 --- ...in.conversations.removeCustomRetention.json | 3 ++- ...admin.conversations.setCustomRetention.json | 3 ++- .../samples/api/admin.usergroups.addTeams.json | 3 ++- json-logs/samples/api/users.conversations.json | 18 +++++++++++++++--- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.removeCustomRetention.json b/json-logs/samples/api/admin.conversations.removeCustomRetention.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.conversations.removeCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.removeCustomRetention.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.conversations.setCustomRetention.json b/json-logs/samples/api/admin.conversations.setCustomRetention.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.conversations.setCustomRetention.json +++ b/json-logs/samples/api/admin.conversations.setCustomRetention.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.usergroups.addTeams.json b/json-logs/samples/api/admin.usergroups.addTeams.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.usergroups.addTeams.json +++ b/json-logs/samples/api/admin.usergroups.addTeams.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 41378a138..924b7c5b0 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -92,9 +92,14 @@ "is_disabled": false }, { - "type": "", + "id": "", "label": "", - "id": "" + "type": "", + "data": { + "folder_bookmark_id": "", + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + } } ], "tabz": [ @@ -110,7 +115,14 @@ "is_disabled": false }, { - "type": "" + "id": "", + "label": "", + "type": "", + "data": { + "folder_bookmark_id": "", + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + } } ], "meeting_notes": { From ce3e9d9f98f770fe2913de89edc66658b9ffe6e4 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 02:24:06 -0700 Subject: [PATCH 048/100] chore: audit log --- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 3ed14b1f3..721d85952 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -501,6 +501,7 @@ private Channel() { public static final String channel_detail_flag_dismissed = "channel_detail_flag_dismissed"; public static final String channel_exclude_from_slack_ai_updated = "channel_exclude_from_slack_ai_updated"; public static final String service_owner_transferred = "service_owner_transferred"; + public static final String channel_restrict_guests_updated = "channel_restrict_guests_updated"; } public static class App { From b6443a9b4c9d7c26fd3c9a162d6f9ef03345dc7b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 02:25:31 -0700 Subject: [PATCH 049/100] test: close auth proxy headers after test concludes --- .../test/java/test_with_remote_apis/AuthProxyHeadersTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java b/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java index 607458eab..164f44515 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/AuthProxyHeadersTest.java @@ -178,6 +178,7 @@ public void methods_system_properties() throws Exception { AuthTestResponse apiResponse = slack.methods().authTest(r -> r.token(botToken)); assertThat(apiResponse.getError(), is(nullValue())); assertThat(callCount.get(), is(1)); + slack.close(); } finally { if (originalHttpProxyHost != null) { From df256ed70ecc4b109f2b1305188993670e9a4c13 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 02:25:49 -0700 Subject: [PATCH 050/100] test: be particular about team id as argument --- .../src/test/java/test_with_remote_apis/methods/team_Test.java | 2 +- .../methods_admin_api/AdminApi_usergroups_Test.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/team_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/team_Test.java index 1a394e0df..b5d178b42 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/team_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/team_Test.java @@ -163,7 +163,7 @@ public void teamInfo() throws Exception { @Test public void teamInfo_EnterpriseGrid() throws Exception { MethodsClient client = slack.methods(gridWorkspaceUserToken); - TeamInfoResponse response = client.teamInfo(r -> r); + TeamInfoResponse response = client.teamInfo(r -> r.team(gridTeamId)); assertThat(response.getError(), is(nullValue())); TeamInfoResponse domainResponse = client.teamInfo(r -> r diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java index 2c6bcfc87..1da91e969 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java @@ -39,6 +39,7 @@ public static void tearDown() throws InterruptedException { public void channels() throws Exception { if (teamAdminUserToken != null && orgAdminUserToken != null && idpUsergroupId != null) { List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r + .teamId(teamId) .excludeArchived(true) .limit(100) ).getChannels().stream() From 54aff965f50031ff1779a3f3292471f5a0f00bb9 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Thu, 4 Jun 2026 01:09:04 +0000 Subject: [PATCH 051/100] feat: add webapi response changes as of 2026-06-04 --- json-logs/raw/audit/v1/actions.json | 3 ++- .../samples/api/users.conversations.json | 20 ------------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index cf7590bb2..a033079dc 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -321,7 +321,8 @@ "slack_connect_pref_migrated", "slack_ai_mcp_resource_read", "slack_ai_mcp_message_sent", - "pref.allow_native_giphy_gif_picker" + "pref.allow_native_giphy_gif_picker", + "slack_ai_mcp_link_opened" ], "user": [ "custom_tos_accepted", diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 924b7c5b0..dbb6ffd76 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -90,16 +90,6 @@ "folder_bookmark_id": "" }, "is_disabled": false - }, - { - "id": "", - "label": "", - "type": "", - "data": { - "folder_bookmark_id": "", - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } } ], "tabz": [ @@ -113,16 +103,6 @@ "folder_bookmark_id": "" }, "is_disabled": false - }, - { - "id": "", - "label": "", - "type": "", - "data": { - "folder_bookmark_id": "", - "file_id": "F00000000", - "shared_ts": "0000000000.000000" - } } ], "meeting_notes": { From b4982b9a07996ed21f5d5e95423d37d933c3c2dc Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 11:02:55 -0700 Subject: [PATCH 052/100] chore: json logs 2026-06-03 --- json-logs/samples/api/admin.usergroups.addChannels.json | 3 ++- json-logs/samples/api/admin.usergroups.listChannels.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/json-logs/samples/api/admin.usergroups.addChannels.json b/json-logs/samples/api/admin.usergroups.addChannels.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.usergroups.addChannels.json +++ b/json-logs/samples/api/admin.usergroups.addChannels.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/admin.usergroups.listChannels.json b/json-logs/samples/api/admin.usergroups.listChannels.json index b70cfb82f..f5e3bf557 100644 --- a/json-logs/samples/api/admin.usergroups.listChannels.json +++ b/json-logs/samples/api/admin.usergroups.listChannels.json @@ -63,5 +63,6 @@ ], "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file From b38285075b3ae3430f525e78b48b83b093d6d437 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 3 Jun 2026 11:03:04 -0700 Subject: [PATCH 053/100] chore: audit log --- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 721d85952..a84e15158 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -502,6 +502,7 @@ private Channel() { public static final String channel_exclude_from_slack_ai_updated = "channel_exclude_from_slack_ai_updated"; public static final String service_owner_transferred = "service_owner_transferred"; public static final String channel_restrict_guests_updated = "channel_restrict_guests_updated"; + public static final String channel_restrict_message_and_file_sharing_updated = "channel_restrict_message_and_file_sharing_updated"; } public static class App { From 47499cfcd2996f475b47b88ebc6a8b4c9561aa3f Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 11:23:34 -0700 Subject: [PATCH 054/100] chore: audit log --- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index a84e15158..680f82478 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -318,6 +318,7 @@ private WorkspaceOrOrg() { public static final String slack_ai_mcp_connector_changed = "slack_ai_mcp_connector_changed"; public static final String slack_ai_mcp_resource_read = "slack_ai_mcp_resource_read"; public static final String slack_ai_mcp_message_sent = "slack_ai_mcp_message_sent"; + public static final String slack_ai_mcp_link_opened = "slack_ai_mcp_link_opened"; public static final String custom_tos_link_clicked = "custom_tos_link_clicked"; public static final String prefs_setting_changed = "prefs_setting_changed"; public static final String auth_policy_created = "auth_policy_created"; From 5ed896b9f7a647c1465e102b440384a5f6852653 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 11:29:22 -0700 Subject: [PATCH 055/100] revert: org admin user token --- .../methods_admin_api/AdminApi_conversations_Test.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index 3d0cc11a5..3f96c58f9 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -244,11 +244,11 @@ public void changeSharedChannels() throws Exception { } static String getOrCreatePrivateChannel() throws Exception { - List privateChannels = slack.methods(orgAdminUserToken).conversationsList(r -> r + List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(orgAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); From c61da93696b94a2b771ea726fd423ebd0411b5c6 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 12:56:40 -0700 Subject: [PATCH 056/100] chore: audit log --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index a00c34c2d..967590e5b 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -52,6 +52,7 @@ public static class User { private String name; private String email; private String team; + private String accountType; } @Data From 1dc9872cdf6d1c2d9c811afc15b58b1679550019 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 12:56:56 -0700 Subject: [PATCH 057/100] revert: undo team argument for workspace scope token --- .../methods_admin_api/AdminApi_conversations_Test.java | 4 ++-- .../methods_admin_api/AdminApi_roles_Test.java | 3 +-- .../methods_admin_api/AdminApi_teams_Test.java | 1 - .../methods_admin_api/AdminApi_usergroups_Test.java | 1 - .../methods_admin_api/AdminApi_users_Test.java | 2 +- 5 files changed, 4 insertions(+), 7 deletions(-) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java index 3f96c58f9..f22f5937c 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_conversations_Test.java @@ -245,10 +245,10 @@ public void changeSharedChannels() throws Exception { static String getOrCreatePrivateChannel() throws Exception { List privateChannels = slack.methods(teamAdminUserToken).conversationsList(r -> r - .teamId(teamId).excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); + .excludeArchived(true).types(Arrays.asList(ConversationType.PRIVATE_CHANNEL)).limit(1)).getChannels(); if (privateChannels.size() == 0 || privateChannels.get(0).isShared()) { String name = "private-test-" + System.currentTimeMillis(); - ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).teamId(teamId).isPrivate(true)); + ConversationsCreateResponse creation = slack.methods(teamAdminUserToken).conversationsCreate(r -> r.name(name).isPrivate(true)); return creation.getChannel().getId(); } else { return privateChannels.get(0).getId(); diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java index bcc20e9f0..a3b677ae4 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_roles_Test.java @@ -54,9 +54,8 @@ public void listRoleAssignments() throws Exception { public void addAndRemoveAssignments() throws Exception { if (orgAdminUserToken != null) { String userId = orgAdminMethodsAsync.authTest(r -> r).get().getUserId(); - String teamId = System.getenv(Constants.SLACK_SDK_TEST_GRID_TEAM_ID); String channelId = workspaceAdminMethodsAsync.usersConversations(r -> r - .user(userId).teamId(teamId).excludeArchived(true).limit(1) + .user(userId).excludeArchived(true).limit(1) ).get().getChannels().get(0).getId(); AdminRolesAddAssignmentsResponse addition = orgAdminMethodsAsync.adminRolesAddAssignments(r -> r .roleId("Rl0A") diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java index 45d0b74e6..b502341ea 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_teams_Test.java @@ -137,7 +137,6 @@ public void teams_settings() throws Exception { assertThat(info.getError(), is(nullValue())); List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r - .teamId(teamId) .excludeArchived(true) .types(Arrays.asList(ConversationType.PUBLIC_CHANNEL)) .limit(2) diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java index 1da91e969..2c6bcfc87 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_usergroups_Test.java @@ -39,7 +39,6 @@ public static void tearDown() throws InterruptedException { public void channels() throws Exception { if (teamAdminUserToken != null && orgAdminUserToken != null && idpUsergroupId != null) { List channelIds = slack.methods(teamAdminUserToken).conversationsList(r -> r - .teamId(teamId) .excludeArchived(true) .limit(100) ).getChannels().stream() diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java index b09514e54..afb4ae959 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods_admin_api/AdminApi_users_Test.java @@ -209,7 +209,7 @@ private String findUserId(List idsToSkip) throws Exception { private List findUserIds(int num, List idsToSkip) throws Exception { List userIds = new ArrayList<>(); - UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req.teamId(teamId)).get(); + UsersListResponse usersListResponse = slack.methodsAsync(teamAdminUserToken).usersList(req -> req).get(); assertThat(usersListResponse.getError(), is(nullValue())); List members = usersListResponse.getMembers(); for (User member : members) { From fef3c182d5215163094bb6b7431d688952fb7955 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 13:59:46 -0700 Subject: [PATCH 058/100] chore: audit log --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 967590e5b..0bee9c2db 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -390,6 +390,8 @@ public static class Details { private String providerKey; private String policyName; private String authenticationMode; + private String authenticationMethod; + private String secondaryAuthenticationMethod; private Object entityIds; private String prefName; private String email; From 3155e41f6879f559018657e0510371e811e06fe0 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 14:56:01 -0700 Subject: [PATCH 059/100] fix: add action_timestamp to audit LogsResponse.Details Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 1 + .../src/test/java/test_locally/api/audit/FieldsTest.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 0bee9c2db..eefb81767 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -392,6 +392,7 @@ public static class Details { private String authenticationMode; private String authenticationMethod; private String secondaryAuthenticationMethod; + private String actionTimestamp; private Object entityIds; private String prefName; private String email; diff --git a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java index 8fa8f83af..741820faf 100644 --- a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java @@ -31,7 +31,7 @@ public void logs() throws Exception { verifyIfAllGettersReturnNonNull(obj, "getRawBody", "getWarning"); verifyIfAllGettersReturnNonNullRecursively(obj.getResponseMetadata(), "getMessages", "getWarnings"); verifyIfAllGettersReturnNonNull(obj.getEntries().get(0), "getDetails"); - verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getActor()); + verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getActor(), "getAccountType"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getContext(), "getSessionId"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getEntity(), "getApp", From 9f8838b55ff781cae60fe876aed8f8fdb14b0d8b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 15:20:32 -0700 Subject: [PATCH 060/100] fix: add client_ja3_fingerprint to audit LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index eefb81767..bc40bf4db 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -393,6 +393,7 @@ public static class Details { private String authenticationMethod; private String secondaryAuthenticationMethod; private String actionTimestamp; + private String clientJa3Fingerprint; private Object entityIds; private String prefName; private String email; From a4016a650fd36484c181a187fd2a34ea1520b35d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 15:53:52 -0700 Subject: [PATCH 061/100] chore: audit log --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + .../src/test/java/test_locally/api/audit/FieldsTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index bc40bf4db..f30136e66 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -394,6 +394,7 @@ public static class Details { private String secondaryAuthenticationMethod; private String actionTimestamp; private String clientJa3Fingerprint; + private Location location; private Object entityIds; private String prefName; private String email; diff --git a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java index 741820faf..4ecfc1776 100644 --- a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java @@ -34,6 +34,7 @@ public void logs() throws Exception { verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getActor(), "getAccountType"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getContext(), "getSessionId"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getEntity(), + "getAccountType", "getApp", "getEnterprise", "getExternalAuthOauth2Token", From 09df1945d86768f3aa953e0563d5190278a2532c Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 16:02:05 -0700 Subject: [PATCH 062/100] ci: use pypi for codecov action uploads Co-Authored-By: Claude --- .github/workflows/ci-build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 565643028..42f59443d 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -47,6 +47,7 @@ jobs: if: ${{ !cancelled() && hashFiles('**/target/surefire-reports/TEST-*.xml') != '' }} uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: + use_pypi: true # https://github.com/codecov/codecov-action/issues/1955 directory: . files: "**/target/surefire-reports/TEST-*.xml" fail_ci_if_error: true @@ -57,6 +58,7 @@ jobs: if: ${{ !cancelled() && startsWith(matrix.java-version, '14') && hashFiles('**/target/site/jacoco/jacoco.xml') != '' }} uses: codecov/codecov-action@e79a6962e0d4c0c17b229090214935d2e33f8354 # v6.0.1 with: + use_pypi: true # https://github.com/codecov/codecov-action/issues/1955 files: "**/target/site/jacoco/jacoco.xml" flags: jdk-${{ matrix.java-version }} token: ${{ secrets.CODECOV_TOKEN }} From af1d23bb78adce926a68c2cb3cbc9399606f1a4d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 16:32:37 -0700 Subject: [PATCH 063/100] fix: add previous_ip_address and fix location type in audit Details Details.location is a string enum ("workspace"|"enterprise"), not the Location object shape used by Context.location. Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index f30136e66..64d288c66 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -394,7 +394,8 @@ public static class Details { private String secondaryAuthenticationMethod; private String actionTimestamp; private String clientJa3Fingerprint; - private Location location; + private String previousIpAddress; + private String location; private Object entityIds; private String prefName; private String email; From 6f2645f6778272a4dc663f73bc1021e48233f5c2 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 16:45:37 -0700 Subject: [PATCH 064/100] fix: add previous_ua to audit LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 64d288c66..1cc69b2f9 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -395,6 +395,7 @@ public static class Details { private String actionTimestamp; private String clientJa3Fingerprint; private String previousIpAddress; + private String previousUa; private String location; private Object entityIds; private String prefName; From 6fb785131a5a58c4290e0432f0dab65beacca603 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 17:02:49 -0700 Subject: [PATCH 065/100] fix: change Details.reason to Object (can be string or array) Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 1cc69b2f9..fcca6c918 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -255,7 +255,7 @@ public static class Details { private List channels; private Object permissions; private String sharedTo; // channel_workspaces_updated - private String reason; + private Object reason; @SerializedName("is_internal_integration") private Boolean internalIntegration; // app_collaborator_added etc. private String clearedResolution; // app_removed_from_whitelist From 3b15d575dd39ddf041d45fc00488b5fb11ee16cd Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sun, 7 Jun 2026 00:46:08 +0000 Subject: [PATCH 066/100] feat: add webapi response changes as of 2026-06-07 --- .../samples/api/admin.usergroups.removeChannels.json | 3 ++- json-logs/samples/api/users.conversations.json | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/json-logs/samples/api/admin.usergroups.removeChannels.json b/json-logs/samples/api/admin.usergroups.removeChannels.json index 1b3fc766f..6b6ba1fe1 100644 --- a/json-logs/samples/api/admin.usergroups.removeChannels.json +++ b/json-logs/samples/api/admin.usergroups.removeChannels.json @@ -2,5 +2,6 @@ "ok": false, "error": "", "needed": "", - "provided": "" + "provided": "", + "warning": "" } \ No newline at end of file diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index dbb6ffd76..41378a138 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -90,6 +90,11 @@ "folder_bookmark_id": "" }, "is_disabled": false + }, + { + "type": "", + "label": "", + "id": "" } ], "tabz": [ @@ -103,6 +108,9 @@ "folder_bookmark_id": "" }, "is_disabled": false + }, + { + "type": "" } ], "meeting_notes": { From 35ee7b08b7af8ab551c26396c627a31d97d5e6da Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Sat, 6 Jun 2026 18:09:07 -0700 Subject: [PATCH 067/100] fix: add user_agent_change_details to audit LogsResponse.Details Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index fcca6c918..7786920fd 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -396,6 +396,7 @@ public static class Details { private String clientJa3Fingerprint; private String previousIpAddress; private String previousUa; + private Object userAgentChangeDetails; private String location; private Object entityIds; private String prefName; From 69ce0f6fc3476a5cc78593074f8181abda78978b Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sun, 7 Jun 2026 03:12:42 +0000 Subject: [PATCH 068/100] feat: add webapi response changes as of 2026-06-07 --- json-logs/samples/audit/v1/logs.json | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/json-logs/samples/audit/v1/logs.json b/json-logs/samples/audit/v1/logs.json index 5193b4615..c26080006 100644 --- a/json-logs/samples/audit/v1/logs.json +++ b/json-logs/samples/audit/v1/logs.json @@ -20,7 +20,8 @@ "id": "", "name": "", "email": "", - "team": "" + "team": "", + "account_type": "" } }, "entity": { @@ -42,7 +43,8 @@ "id": "", "name": "", "email": "", - "team": "" + "team": "", + "account_type": "" }, "usergroup": { "id": "", @@ -168,7 +170,8 @@ "id": "", "name": "", "email": "", - "team": "" + "team": "", + "account_type": "" }, "id": "", "name": "", @@ -181,7 +184,8 @@ "id": "", "name": "", "email": "", - "team": "" + "team": "", + "account_type": "" }, "id": "", "name": "", @@ -218,7 +222,7 @@ } ], "shared_to": "", - "reason": "", + "reason": {}, "is_internal_integration": false, "cleared_resolution": "", "is_workflow": false, @@ -418,6 +422,14 @@ "provider_key": "", "policy_name": "", "authentication_mode": "", + "authentication_method": "", + "secondary_authentication_method": "", + "action_timestamp": "", + "client_ja3_fingerprint": "", + "previous_ip_address": "", + "previous_ua": "", + "user_agent_change_details": {}, + "location": "", "entity_ids": {}, "pref_name": "", "email": "", From bb3764639f31c7c0a196f3baf52e966a6526d03d Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:59:40 +0000 Subject: [PATCH 069/100] feat: add webapi response changes as of 2026-06-08 --- json-logs/samples/api/users.conversations.json | 8 -------- 1 file changed, 8 deletions(-) diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 41378a138..dbb6ffd76 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -90,11 +90,6 @@ "folder_bookmark_id": "" }, "is_disabled": false - }, - { - "type": "", - "label": "", - "id": "" } ], "tabz": [ @@ -108,9 +103,6 @@ "folder_bookmark_id": "" }, "is_disabled": false - }, - { - "type": "" } ], "meeting_notes": { From 2b331787c4416a7deb63a8dcc38b14ce0e76d309 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Tue, 9 Jun 2026 00:55:26 +0000 Subject: [PATCH 070/100] feat: add webapi response changes as of 2026-06-09 --- json-logs/raw/audit/v1/actions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index a033079dc..dfc9ab513 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -322,7 +322,8 @@ "slack_ai_mcp_resource_read", "slack_ai_mcp_message_sent", "pref.allow_native_giphy_gif_picker", - "slack_ai_mcp_link_opened" + "slack_ai_mcp_link_opened", + "slackbot_analytics_export_started" ], "user": [ "custom_tos_accepted", From 9dafdaa6aa4b22c8b4b7432d7f8f977b40db5319 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Wed, 10 Jun 2026 00:59:15 +0000 Subject: [PATCH 071/100] feat: add webapi response changes as of 2026-06-10 --- json-logs/samples/api/admin.apps.activities.list.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/json-logs/samples/api/admin.apps.activities.list.json b/json-logs/samples/api/admin.apps.activities.list.json index cc3cf3f00..98b64cff8 100644 --- a/json-logs/samples/api/admin.apps.activities.list.json +++ b/json-logs/samples/api/admin.apps.activities.list.json @@ -59,7 +59,11 @@ "message_ts": "0000000000.000000" }, "code": "", - "app_id": "A00000000" + "app_id": "A00000000", + "tool_name": "", + "server_name": "", + "message": "", + "tool_count": 12345 }, "created": 12345, "trace_id": "", From a867165f6e3b5748d5b182fdcfe2569685b71d40 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Thu, 11 Jun 2026 00:55:02 +0000 Subject: [PATCH 072/100] feat: add webapi response changes as of 2026-06-11 --- json-logs/samples/api/admin.apps.activities.list.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/json-logs/samples/api/admin.apps.activities.list.json b/json-logs/samples/api/admin.apps.activities.list.json index 98b64cff8..50c848d3c 100644 --- a/json-logs/samples/api/admin.apps.activities.list.json +++ b/json-logs/samples/api/admin.apps.activities.list.json @@ -63,7 +63,10 @@ "tool_name": "", "server_name": "", "message": "", - "tool_count": 12345 + "tool_count": 12345, + "elapsed_ms": 12345, + "error_stage": "", + "http_status_code": 12345 }, "created": 12345, "trace_id": "", From 0532c48569de8db1d6e66c30a13bbb9c17e1d737 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Fri, 12 Jun 2026 00:45:24 +0000 Subject: [PATCH 073/100] feat: add webapi response changes as of 2026-06-12 --- json-logs/raw/audit/v1/actions.json | 3 +- .../api/admin.apps.activities.list.json | 5 +- .../samples/api/users.conversations.json | 18 ++++ json-logs/samples/api/users.list.json | 93 ++++++++----------- 4 files changed, 62 insertions(+), 57 deletions(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index dfc9ab513..09f48f9d7 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -482,7 +482,8 @@ "channel_exclude_from_slack_ai_updated", "service_owner_transferred", "channel_restrict_guests_updated", - "channel_restrict_message_and_file_sharing_updated" + "channel_restrict_message_and_file_sharing_updated", + "channel_properties_updated" ], "app": [ "app_installed", diff --git a/json-logs/samples/api/admin.apps.activities.list.json b/json-logs/samples/api/admin.apps.activities.list.json index 50c848d3c..1cb9b65a6 100644 --- a/json-logs/samples/api/admin.apps.activities.list.json +++ b/json-logs/samples/api/admin.apps.activities.list.json @@ -66,7 +66,10 @@ "tool_count": 12345, "elapsed_ms": 12345, "error_stage": "", - "http_status_code": 12345 + "http_status_code": 12345, + "provider_key": "", + "tokens_checked": 12345, + "extra_message": "" }, "created": 12345, "trace_id": "", diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index dbb6ffd76..521ba1c7d 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -90,6 +90,15 @@ "folder_bookmark_id": "" }, "is_disabled": false + }, + { + "type": "", + "label": "", + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + } } ], "tabz": [ @@ -103,6 +112,15 @@ "folder_bookmark_id": "" }, "is_disabled": false + }, + { + "type": "", + "id": "", + "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000" + }, + "label": "" } ], "meeting_notes": { diff --git a/json-logs/samples/api/users.list.json b/json-logs/samples/api/users.list.json index de86f3c29..cb67a10dd 100644 --- a/json-logs/samples/api/users.list.json +++ b/json-logs/samples/api/users.list.json @@ -1,51 +1,49 @@ { "ok": false, + "offset": "U00000000", "members": [ { "id": "U00000000", - "team_id": "T00000000", "name": "", + "is_bot": false, + "updated": 12345, + "is_app_user": false, + "team_id": "T00000000", "deleted": false, - "color": "", + "color": "12345", + "is_email_confirmed": false, "real_name": "", "tz": "", "tz_label": "", "tz_offset": 12345, + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "is_restricted": false, + "is_ultra_restricted": false, + "who_can_share_contact_card": "", "profile": { - "title": "", - "phone": "12345", - "skype": "", "real_name": "", - "real_name_normalized": "", "display_name": "", - "display_name_normalized": "", - "status_text": "", - "status_emoji": "", - "status_expiration": 12345, "avatar_hash": "", - "image_original": "https://www.example.com/", - "is_custom_image": false, - "email": "", - "pronouns": "", - "first_name": "", - "last_name": "", + "real_name_normalized": "", + "display_name_normalized": "", "image_24": "https://www.example.com/", "image_32": "https://www.example.com/", "image_48": "https://www.example.com/", "image_72": "https://www.example.com/", "image_192": "https://www.example.com/", "image_512": "https://www.example.com/", - "image_1024": "https://www.example.com/", - "status_text_canonical": "", + "first_name": "", + "last_name": "", "team": "T00000000", - "api_app_id": "", - "bot_id": "B00000000", - "always_active": false, - "guest_invited_by": "U00000000", - "guest_expiration_ts": 12345, - "huddle_state": "", - "huddle_state_expiration_ts": 12345, + "title": "", + "phone": "", + "skype": "", "fields": {}, + "status_text": "", + "status_text_canonical": "", + "status_emoji": "", "status_emoji_display_info": [ { "emoji_name": "", @@ -54,45 +52,30 @@ "unicode": "" } ], + "status_expiration": 12345, + "always_active": false, + "image_1024": "https://www.example.com/", + "image_original": "https://www.example.com/", + "is_custom_image": false, + "email": "", + "bot_id": "B00000000", + "api_app_id": "A00000000", + "huddle_state": "", + "huddle_state_expiration_ts": 12345, "start_date": "" }, - "is_admin": false, - "is_owner": false, - "is_primary_owner": false, - "is_restricted": false, - "is_ultra_restricted": false, - "is_bot": false, - "is_app_user": false, - "updated": 12345, - "is_email_confirmed": false, - "who_can_share_contact_card": "", - "is_workflow_bot": false, "has_2fa": false, - "locale": "", - "enterprise_user": { - "id": "U00000000", - "enterprise_id": "E00000000", - "enterprise_name": "", - "is_admin": false, - "is_owner": false, - "teams": [ - "" - ], - "is_primary_owner": false - }, - "is_invited_user": false, - "is_connector_bot": false, - "two_factor_type": "" + "two_factor_type": "", + "is_workflow_bot": false, + "locale": "" } ], "cache_ts": 12345, - "offset": "U00000000", "response_metadata": { "next_cursor": "" }, + "warning": "", "error": "", "needed": "", - "provided": "", - "arg": "", - "warning": "" + "provided": "" } \ No newline at end of file From 05564d11edeb9972895689857e2aebbd676e90d3 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Thu, 18 Jun 2026 00:45:54 +0000 Subject: [PATCH 074/100] feat: add webapi response changes as of 2026-06-18 --- json-logs/raw/audit/v1/actions.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index 09f48f9d7..eb4368460 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -323,7 +323,11 @@ "slack_ai_mcp_message_sent", "pref.allow_native_giphy_gif_picker", "slack_ai_mcp_link_opened", - "slackbot_analytics_export_started" + "slackbot_analytics_export_started", + "enterprise_managed_auth_enabled", + "enterprise_managed_auth_disabled", + "enterprise_managed_auth_rebound", + "mcp_slack_read_list_tool_called" ], "user": [ "custom_tos_accepted", @@ -391,7 +395,9 @@ "slack_ai_skill_invoked", "slack_ai_skill_metadata_updated", "slack_ai_skill_auto_enabled", - "slack_ai_skill_auto_disabled" + "slack_ai_skill_auto_disabled", + "slack_ai_skill_share_link_created", + "slack_ai_skill_external_copy_added" ], "file": [ "file_downloaded", From 9de013afa124ea4a730c1971bfa5e13ae3660662 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sat, 20 Jun 2026 00:41:39 +0000 Subject: [PATCH 075/100] feat: add webapi response changes as of 2026-06-20 --- json-logs/samples/scim/v2/Users.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/json-logs/samples/scim/v2/Users.json b/json-logs/samples/scim/v2/Users.json index 0efa034d5..3246a8c86 100644 --- a/json-logs/samples/scim/v2/Users.json +++ b/json-logs/samples/scim/v2/Users.json @@ -36,6 +36,10 @@ } ], "photos": [ + { + "value": "https://www.example.com/", + "type": "" + }, { "value": "", "type": "" @@ -77,10 +81,6 @@ "manager": {} }, "groups": [ - { - "value": "S00000000", - "display": "" - }, { "value": "", "display": "" From 1c410c0638430d72e0b0a21bc8987d6bbbcb782e Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sun, 21 Jun 2026 00:41:29 +0000 Subject: [PATCH 076/100] feat: add webapi response changes as of 2026-06-21 --- json-logs/samples/scim/v2/Users.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/json-logs/samples/scim/v2/Users.json b/json-logs/samples/scim/v2/Users.json index 3246a8c86..57d1122e7 100644 --- a/json-logs/samples/scim/v2/Users.json +++ b/json-logs/samples/scim/v2/Users.json @@ -81,6 +81,10 @@ "manager": {} }, "groups": [ + { + "value": "S00000000", + "display": "" + }, { "value": "", "display": "" From 2e621164d6f04c72fe28b87b83c8930d54a15905 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Tue, 23 Jun 2026 00:41:47 +0000 Subject: [PATCH 077/100] feat: add webapi response changes as of 2026-06-23 --- json-logs/raw/audit/v1/actions.json | 11 +++++++++++ json-logs/samples/audit/v1/actions.json | 3 +++ 2 files changed, 14 insertions(+) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index eb4368460..175aad326 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -783,6 +783,17 @@ "legal_hold_policy_entities_deleted", "legal_hold_policy_exclusion_added", "legal_hold_policy_exclusion_deleted" + ], + "salesforce_mcp_server": [ + "salesforce_mcp_server_enabled", + "salesforce_mcp_server_disabled", + "salesforce_mcp_server_deleted", + "salesforce_mcp_server_config_updated", + "salesforce_mcp_server_org_disconnected", + "salesforce_mcp_server_org_reconnected", + "salesforce_mcp_server_workspace_granted", + "salesforce_mcp_server_workspace_revoked", + "salesforce_mcp_server_acl_updated" ] } } \ No newline at end of file diff --git a/json-logs/samples/audit/v1/actions.json b/json-logs/samples/audit/v1/actions.json index 232a358c1..d791c5be6 100644 --- a/json-logs/samples/audit/v1/actions.json +++ b/json-logs/samples/audit/v1/actions.json @@ -71,6 +71,9 @@ ], "legal_hold": [ "" + ], + "salesforce_mcp_server": [ + "" ] }, "ok": false, From 49a1b2081d422430db711b6d9c5cab1f5839ce73 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Wed, 24 Jun 2026 00:36:39 +0000 Subject: [PATCH 078/100] feat: add webapi response changes as of 2026-06-24 --- json-logs/samples/api/admin.conversations.search.json | 8 ++++++-- json-logs/samples/api/workflows.stepCompleted.json | 3 ++- json-logs/samples/api/workflows.stepFailed.json | 3 ++- json-logs/samples/api/workflows.updateStep.json | 3 ++- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/json-logs/samples/api/admin.conversations.search.json b/json-logs/samples/api/admin.conversations.search.json index 6aa9bad34..1d48345fb 100644 --- a/json-logs/samples/api/admin.conversations.search.json +++ b/json-logs/samples/api/admin.conversations.search.json @@ -125,6 +125,8 @@ "label": "", "id": "", "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000", "folder_bookmark_id": "" } } @@ -144,10 +146,12 @@ { "type": "", "id": "", - "label": "", "data": { + "file_id": "F00000000", + "shared_ts": "0000000000.000000", "folder_bookmark_id": "" - } + }, + "label": "" } ], "meeting_notes": { diff --git a/json-logs/samples/api/workflows.stepCompleted.json b/json-logs/samples/api/workflows.stepCompleted.json index 6b6ba1fe1..d81532314 100644 --- a/json-logs/samples/api/workflows.stepCompleted.json +++ b/json-logs/samples/api/workflows.stepCompleted.json @@ -3,5 +3,6 @@ "error": "", "needed": "", "provided": "", - "warning": "" + "warning": "", + "req_method": "" } \ No newline at end of file diff --git a/json-logs/samples/api/workflows.stepFailed.json b/json-logs/samples/api/workflows.stepFailed.json index 6b6ba1fe1..d81532314 100644 --- a/json-logs/samples/api/workflows.stepFailed.json +++ b/json-logs/samples/api/workflows.stepFailed.json @@ -3,5 +3,6 @@ "error": "", "needed": "", "provided": "", - "warning": "" + "warning": "", + "req_method": "" } \ No newline at end of file diff --git a/json-logs/samples/api/workflows.updateStep.json b/json-logs/samples/api/workflows.updateStep.json index 6b6ba1fe1..d81532314 100644 --- a/json-logs/samples/api/workflows.updateStep.json +++ b/json-logs/samples/api/workflows.updateStep.json @@ -3,5 +3,6 @@ "error": "", "needed": "", "provided": "", - "warning": "" + "warning": "", + "req_method": "" } \ No newline at end of file From 4eb599b9b92d518c3de9ec2fb6a07d402375a095 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Thu, 25 Jun 2026 00:40:58 +0000 Subject: [PATCH 079/100] feat: add webapi response changes as of 2026-06-25 --- json-logs/samples/api/auth.test.json | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/json-logs/samples/api/auth.test.json b/json-logs/samples/api/auth.test.json index b76f19e48..47cefaa0b 100644 --- a/json-logs/samples/api/auth.test.json +++ b/json-logs/samples/api/auth.test.json @@ -7,13 +7,11 @@ "user_id": "U00000000", "bot_id": "B00000000", "is_enterprise_install": false, - "app_name": "", - "app_id": "A00000000", - "enterprise_id": "E00000000", "error": "", + "warning": "", "needed": "", "provided": "", - "expires_in": 12345, - "context": "", - "warning": "" + "enterprise_id": "E00000000", + "app_name": "", + "app_id": "A00000000" } \ No newline at end of file From 0e4d9667e0c020f2293e82f857ad7efe15d0c792 Mon Sep 17 00:00:00 2001 From: "slackapi[bot]" <186980925+slackapi[bot]@users.noreply.github.com> Date: Sat, 27 Jun 2026 00:42:33 +0000 Subject: [PATCH 080/100] feat: add webapi response changes as of 2026-06-27 --- json-logs/raw/audit/v1/actions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/json-logs/raw/audit/v1/actions.json b/json-logs/raw/audit/v1/actions.json index 175aad326..0b77cea8c 100644 --- a/json-logs/raw/audit/v1/actions.json +++ b/json-logs/raw/audit/v1/actions.json @@ -327,7 +327,8 @@ "enterprise_managed_auth_enabled", "enterprise_managed_auth_disabled", "enterprise_managed_auth_rebound", - "mcp_slack_read_list_tool_called" + "mcp_slack_read_list_tool_called", + "mcp_slack_create_list_tool_called" ], "user": [ "custom_tos_accepted", From e7778740391833723b0e99dc2b706b4bbf785e8e Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 00:00:52 -0700 Subject: [PATCH 081/100] feat: add audit log properties and actions detected from tests Properties surfaced by test_with_remote_apis.audit.ApiTest: - ActionsResponse.Actions.salesforceMcpServer (List) - LogsResponse.Context.actingAgent (String) - LogsResponse.Context.agentMessage + AgentMessage nested type (team, channelId, messageTs, threadTs) - LogsResponse.Details.clonedFileId (String) - LogsResponse.Details.toolName (String) New action constants: - User: slack_ai_skill_share_link_created, slack_ai_skill_external_copy_added - Channel: channel_properties_updated All additive and properly typed (no Object fields, no breaking changes). Types confirmed against webapp audit log assembly source. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/Actions.java | 3 +++ .../slack/api/audit/response/ActionsResponse.java | 1 + .../com/slack/api/audit/response/LogsResponse.java | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 680f82478..b534ec281 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -405,6 +405,8 @@ private User() { public static final String slack_ai_skill_metadata_updated = "slack_ai_skill_metadata_updated"; public static final String slack_ai_skill_auto_enabled = "slack_ai_skill_auto_enabled"; public static final String slack_ai_skill_auto_disabled = "slack_ai_skill_auto_disabled"; + public static final String slack_ai_skill_share_link_created = "slack_ai_skill_share_link_created"; + public static final String slack_ai_skill_external_copy_added = "slack_ai_skill_external_copy_added"; } public static class File { @@ -504,6 +506,7 @@ private Channel() { public static final String service_owner_transferred = "service_owner_transferred"; public static final String channel_restrict_guests_updated = "channel_restrict_guests_updated"; public static final String channel_restrict_message_and_file_sharing_updated = "channel_restrict_message_and_file_sharing_updated"; + public static final String channel_properties_updated = "channel_properties_updated"; } public static class App { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/ActionsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/ActionsResponse.java index 0eaa8da35..f928f2961 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/ActionsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/ActionsResponse.java @@ -52,5 +52,6 @@ public static class Actions { private List template; private List list; private List legalHold; + private List salesforceMcpServer; } } diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 7786920fd..9345e4c96 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -156,6 +156,16 @@ public static class Context { private String ua; private String ipAddress; private App app; + private String actingAgent; + private AgentMessage agentMessage; + } + + @Data + public static class AgentMessage { + private String team; + private String channelId; + private String messageTs; + private String threadTs; } @Data @@ -377,6 +387,7 @@ public static class Details { @SerializedName("is_slack_provided_template") private Boolean slackProvidedTemplate; private String templateTitle; + private String clonedFileId; private String threadTs; private String status; private String entityTeam; @@ -414,6 +425,7 @@ public static class Details { private List workflowsAdded; private List datastoresAdded; private ConversationPref whoCanDmAnyone; + private String toolName; } @Data From a0994d8b28a0e63957afd30e07190ae925322437 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 00:15:44 -0700 Subject: [PATCH 082/100] feat: add audit properties/actions and type the function entity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Properties surfaced by test_with_remote_apis.audit.ApiTest: - LogsResponse.Details.serviceType (String) — MCP service type - LogsResponse.Entity.function: Object -> typed Function{id, appId, callbackId} New action constants (WorkspaceOrOrg): - slackbot_analytics_export_started - enterprise_managed_auth_enabled - enterprise_managed_auth_disabled The Entity.externalAuthOauth2Token field is intentionally left as Object: the live API returns it polymorphically (provider.id overflows int and provider.app.scopes is sometimes a String, sometimes an array). Typing it needs captured JSON and belongs in its own PR. Documented inline. All additive, no breaking changes. Types confirmed against live test JSON and webapp audit assembly source. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/Actions.java | 3 +++ .../com/slack/api/audit/response/LogsResponse.java | 13 ++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index b534ec281..8d08386f1 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -333,6 +333,9 @@ private WorkspaceOrOrg() { public static final String pref_show_join_leave_changed = "pref.show_join_leave_changed"; public static final String pref_show_join_leave_welcome_party_changed = "pref.show_join_leave_welcome_party_changed"; public static final String pref_allow_native_giphy_gif_picker = "pref.allow_native_giphy_gif_picker"; + public static final String slackbot_analytics_export_started = "slackbot_analytics_export_started"; + public static final String enterprise_managed_auth_enabled = "enterprise_managed_auth_enabled"; + public static final String enterprise_managed_auth_disabled = "enterprise_managed_auth_disabled"; } public static class User { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 9345e4c96..fbe1f38e9 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -73,8 +73,18 @@ public static class Entity { private InformationBarrier barrier; private WorkflowV2 workflowV2; private SlackList list; + // Polymorphic per provider/app context (e.g. provider.app.scopes is sometimes a + // String, sometimes an array; provider.id overflows int). Needs its own PR with + // captured JSON before typing. See deferred conversion notes. private Object externalAuthOauth2Token; - private Object function; + private Function function; + } + + @Data + public static class Function { + private String id; + private String appId; + private String callbackId; } @Data @@ -426,6 +436,7 @@ public static class Details { private List datastoresAdded; private ConversationPref whoCanDmAnyone; private String toolName; + private String serviceType; } @Data From a0d98269a107c8cf3bb12f412fa649ca39c94ae8 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 00:30:49 -0700 Subject: [PATCH 083/100] feat: add audit MCP server_name property and enterprise auth action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.serverName (String) — MCP server name - WorkspaceOrOrg action: enterprise_managed_auth_rebound Additive, confirmed against webapp MCP shapes. No breaking changes. Co-Authored-By: Claude --- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 + .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 2 files changed, 2 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 8d08386f1..1c2cef220 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -336,6 +336,7 @@ private WorkspaceOrOrg() { public static final String slackbot_analytics_export_started = "slackbot_analytics_export_started"; public static final String enterprise_managed_auth_enabled = "enterprise_managed_auth_enabled"; public static final String enterprise_managed_auth_disabled = "enterprise_managed_auth_disabled"; + public static final String enterprise_managed_auth_rebound = "enterprise_managed_auth_rebound"; } public static class User { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index fbe1f38e9..0b111a1dd 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -437,6 +437,7 @@ public static class Details { private ConversationPref whoCanDmAnyone; private String toolName; private String serviceType; + private String serverName; } @Data From d1935946a26198f42f3d2f7428ec86b627bdf0df Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 00:41:57 -0700 Subject: [PATCH 084/100] feat: add audit MCP success property and tool-called action MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.success (Boolean) — MCP tool-call result - WorkspaceOrOrg action: mcp_slack_create_list_tool_called Also drop the use_pypi codecov-action workaround: now that the action is pinned to v7.0.0 (merged from main), the issue #1955 mitigation is no longer needed. Co-Authored-By: Claude --- .github/workflows/ci-build.yml | 2 -- slack-api-client/src/main/java/com/slack/api/audit/Actions.java | 1 + .../main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index cf5fe8dc6..6ca415af9 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -47,7 +47,6 @@ jobs: if: ${{ !cancelled() && hashFiles('**/target/surefire-reports/TEST-*.xml') != '' }} uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: - use_pypi: true # https://github.com/codecov/codecov-action/issues/1955 directory: . files: "**/target/surefire-reports/TEST-*.xml" fail_ci_if_error: true @@ -58,7 +57,6 @@ jobs: if: ${{ !cancelled() && startsWith(matrix.java-version, '14') && hashFiles('**/target/site/jacoco/jacoco.xml') != '' }} uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: - use_pypi: true # https://github.com/codecov/codecov-action/issues/1955 files: "**/target/site/jacoco/jacoco.xml" flags: jdk-${{ matrix.java-version }} token: ${{ secrets.CODECOV_TOKEN }} diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 1c2cef220..783fd95e3 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -337,6 +337,7 @@ private WorkspaceOrOrg() { public static final String enterprise_managed_auth_enabled = "enterprise_managed_auth_enabled"; public static final String enterprise_managed_auth_disabled = "enterprise_managed_auth_disabled"; public static final String enterprise_managed_auth_rebound = "enterprise_managed_auth_rebound"; + public static final String mcp_slack_create_list_tool_called = "mcp_slack_create_list_tool_called"; } public static class User { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 0b111a1dd..3d5f4e6f5 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -438,6 +438,7 @@ public static class Details { private String toolName; private String serviceType; private String serverName; + private Boolean success; } @Data From 209e2d0df94a8695915115b33b361150bb41c482 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 00:55:28 -0700 Subject: [PATCH 085/100] feat: add MCP argument_keys property and full mcp_slack tool-called actions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.argumentKeys (List) — sorted MCP tool-call argument key names (values omitted for PII safety), confirmed from src/ai/mcp/McpClientAuditLog.hack - Add the complete mcp_slack_*_tool_called WorkspaceOrOrg action family (29 constants) from the authoritative enum in include/compliance/audit_logs/lib_audit_logs_ext.hack. The test org actively exercises the Slack MCP server, so these surface one-per-run; adding the full enumerated set avoids many slow audit iterations. Action-name constants carry no deserialization risk. Co-Authored-By: Claude --- .../java/com/slack/api/audit/Actions.java | 28 +++++++++++++++++++ .../api/audit/response/LogsResponse.java | 1 + 2 files changed, 29 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 783fd95e3..2e294071b 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -337,7 +337,35 @@ private WorkspaceOrOrg() { public static final String enterprise_managed_auth_enabled = "enterprise_managed_auth_enabled"; public static final String enterprise_managed_auth_disabled = "enterprise_managed_auth_disabled"; public static final String enterprise_managed_auth_rebound = "enterprise_managed_auth_rebound"; + public static final String mcp_slack_read_canvas_tool_called = "mcp_slack_read_canvas_tool_called"; + public static final String mcp_slack_create_canvas_tool_called = "mcp_slack_create_canvas_tool_called"; + public static final String mcp_slack_update_canvas_tool_called = "mcp_slack_update_canvas_tool_called"; + public static final String mcp_slack_read_channel_tool_called = "mcp_slack_read_channel_tool_called"; + public static final String mcp_slack_read_thread_tool_called = "mcp_slack_read_thread_tool_called"; + public static final String mcp_slack_search_public_tool_called = "mcp_slack_search_public_tool_called"; + public static final String mcp_slack_search_channels_tool_called = "mcp_slack_search_channels_tool_called"; + public static final String mcp_slack_search_public_and_private_tool_called = "mcp_slack_search_public_and_private_tool_called"; + public static final String mcp_slack_search_users_tool_called = "mcp_slack_search_users_tool_called"; + public static final String mcp_slack_send_message_tool_called = "mcp_slack_send_message_tool_called"; + public static final String mcp_slack_read_user_profile_tool_called = "mcp_slack_read_user_profile_tool_called"; + public static final String mcp_slack_create_draft_tool_called = "mcp_slack_create_draft_tool_called"; + public static final String mcp_slack_create_draft_message_tool_called = "mcp_slack_create_draft_message_tool_called"; + public static final String mcp_slack_send_message_draft_tool_called = "mcp_slack_send_message_draft_tool_called"; + public static final String mcp_slack_schedule_message_tool_called = "mcp_slack_schedule_message_tool_called"; + public static final String mcp_slack_list_channel_members_tool_called = "mcp_slack_list_channel_members_tool_called"; + public static final String mcp_slack_mark_read_tool_called = "mcp_slack_mark_read_tool_called"; + public static final String mcp_slack_search_emojis_tool_called = "mcp_slack_search_emojis_tool_called"; + public static final String mcp_slack_add_reaction_tool_called = "mcp_slack_add_reaction_tool_called"; + public static final String mcp_slack_get_reactions_tool_called = "mcp_slack_get_reactions_tool_called"; + public static final String mcp_slack_create_conversation_tool_called = "mcp_slack_create_conversation_tool_called"; + public static final String mcp_slack_read_file_tool_called = "mcp_slack_read_file_tool_called"; + public static final String mcp_slack_get_workflow_details_tool_called = "mcp_slack_get_workflow_details_tool_called"; + public static final String mcp_slack_get_workflow_execution_status_tool_called = "mcp_slack_get_workflow_execution_status_tool_called"; + public static final String mcp_slack_canvas_find_replace_tool_called = "mcp_slack_canvas_find_replace_tool_called"; + public static final String mcp_slack_list_workflows_tool_called = "mcp_slack_list_workflows_tool_called"; + public static final String mcp_slack_run_workflow_tool_called = "mcp_slack_run_workflow_tool_called"; public static final String mcp_slack_create_list_tool_called = "mcp_slack_create_list_tool_called"; + public static final String mcp_slack_read_list_tool_called = "mcp_slack_read_list_tool_called"; } public static class User { diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 3d5f4e6f5..c0c9a855f 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -439,6 +439,7 @@ public static class Details { private String serviceType; private String serverName; private Boolean success; + private List argumentKeys; } @Data From 1430c760f0cf273dbf259b96a82575af4d0c0cdd Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:01:26 -0700 Subject: [PATCH 086/100] fix: remove duplicate mcp_slack_*_tool_called constants The mcp_slack_*_tool_called action family already existed in Actions.WorkspaceOrOrg; a prior commit re-added all 27, producing duplicate field declarations that broke compilation (surfacing as spurious "cannot find symbol ...Builder" errors in AsyncMethodsClient once Actions.java failed to compile). Keep the original block plus the two genuinely new constants (mcp_slack_create_list_tool_called, mcp_slack_read_list_tool_called). Verified with a clean mvn build. Co-Authored-By: Claude --- .../java/com/slack/api/audit/Actions.java | 27 ------------------- 1 file changed, 27 deletions(-) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java index 2e294071b..bfb8ca5b3 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/Actions.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/Actions.java @@ -337,33 +337,6 @@ private WorkspaceOrOrg() { public static final String enterprise_managed_auth_enabled = "enterprise_managed_auth_enabled"; public static final String enterprise_managed_auth_disabled = "enterprise_managed_auth_disabled"; public static final String enterprise_managed_auth_rebound = "enterprise_managed_auth_rebound"; - public static final String mcp_slack_read_canvas_tool_called = "mcp_slack_read_canvas_tool_called"; - public static final String mcp_slack_create_canvas_tool_called = "mcp_slack_create_canvas_tool_called"; - public static final String mcp_slack_update_canvas_tool_called = "mcp_slack_update_canvas_tool_called"; - public static final String mcp_slack_read_channel_tool_called = "mcp_slack_read_channel_tool_called"; - public static final String mcp_slack_read_thread_tool_called = "mcp_slack_read_thread_tool_called"; - public static final String mcp_slack_search_public_tool_called = "mcp_slack_search_public_tool_called"; - public static final String mcp_slack_search_channels_tool_called = "mcp_slack_search_channels_tool_called"; - public static final String mcp_slack_search_public_and_private_tool_called = "mcp_slack_search_public_and_private_tool_called"; - public static final String mcp_slack_search_users_tool_called = "mcp_slack_search_users_tool_called"; - public static final String mcp_slack_send_message_tool_called = "mcp_slack_send_message_tool_called"; - public static final String mcp_slack_read_user_profile_tool_called = "mcp_slack_read_user_profile_tool_called"; - public static final String mcp_slack_create_draft_tool_called = "mcp_slack_create_draft_tool_called"; - public static final String mcp_slack_create_draft_message_tool_called = "mcp_slack_create_draft_message_tool_called"; - public static final String mcp_slack_send_message_draft_tool_called = "mcp_slack_send_message_draft_tool_called"; - public static final String mcp_slack_schedule_message_tool_called = "mcp_slack_schedule_message_tool_called"; - public static final String mcp_slack_list_channel_members_tool_called = "mcp_slack_list_channel_members_tool_called"; - public static final String mcp_slack_mark_read_tool_called = "mcp_slack_mark_read_tool_called"; - public static final String mcp_slack_search_emojis_tool_called = "mcp_slack_search_emojis_tool_called"; - public static final String mcp_slack_add_reaction_tool_called = "mcp_slack_add_reaction_tool_called"; - public static final String mcp_slack_get_reactions_tool_called = "mcp_slack_get_reactions_tool_called"; - public static final String mcp_slack_create_conversation_tool_called = "mcp_slack_create_conversation_tool_called"; - public static final String mcp_slack_read_file_tool_called = "mcp_slack_read_file_tool_called"; - public static final String mcp_slack_get_workflow_details_tool_called = "mcp_slack_get_workflow_details_tool_called"; - public static final String mcp_slack_get_workflow_execution_status_tool_called = "mcp_slack_get_workflow_execution_status_tool_called"; - public static final String mcp_slack_canvas_find_replace_tool_called = "mcp_slack_canvas_find_replace_tool_called"; - public static final String mcp_slack_list_workflows_tool_called = "mcp_slack_list_workflows_tool_called"; - public static final String mcp_slack_run_workflow_tool_called = "mcp_slack_run_workflow_tool_called"; public static final String mcp_slack_create_list_tool_called = "mcp_slack_create_list_tool_called"; public static final String mcp_slack_read_list_tool_called = "mcp_slack_read_list_tool_called"; } From d4fb16ef1abd929759a84f020506d66c7b95644a Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:12:36 -0700 Subject: [PATCH 087/100] feat: add audit MCP read_only property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.readOnly (Boolean) — MCP tool read-only flag, confirmed from slackbot_mcp_listTools_output.hack Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index c0c9a855f..b2979f1fd 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -440,6 +440,7 @@ public static class Details { private String serverName; private Boolean success; private List argumentKeys; + private Boolean readOnly; } @Data From 5bbf8d824fbd6d57a86d8acf997a94867b6d9fac Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:22:58 -0700 Subject: [PATCH 088/100] feat: add audit MCP mcp_client_inferred_behavior property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.mcpClientInferredBehavior (String) — 'read_tool' or 'write_tool', confirmed from src/ai/mcp/McpClientAuditLog.hack Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index b2979f1fd..5c266ed30 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -441,6 +441,7 @@ public static class Details { private Boolean success; private List argumentKeys; private Boolean readOnly; + private String mcpClientInferredBehavior; } @Data From fea996acd3d49b70ba96e4ace9ff91a3b164d16c Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:33:20 -0700 Subject: [PATCH 089/100] feat: add audit MCP destructive property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.destructive (Boolean) — MCP tool destructiveHint, confirmed from src/ai/mcp/McpClientAuditLog.hack Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 5c266ed30..d7c9f197a 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -442,6 +442,7 @@ public static class Details { private List argumentKeys; private Boolean readOnly; private String mcpClientInferredBehavior; + private Boolean destructive; } @Data From 3215bb5cd375581413c95aef5878fcfba27dfbd5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:43:56 -0700 Subject: [PATCH 090/100] feat: add audit source property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.source (String) — audit entry source identifier (e.g. backfill/event-log origins); string across all webapp usages. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index d7c9f197a..b882c5ef4 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -443,6 +443,7 @@ public static class Details { private Boolean readOnly; private String mcpClientInferredBehavior; private Boolean destructive; + private String source; } @Data From b0e72b0d74feee0a2c78a64561be1cbbe20b3b96 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 01:54:19 -0700 Subject: [PATCH 091/100] feat: add audit MCP decision property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.decision (String) — MCP tool permission decision, confirmed from src/ai/mcp/McpToolPermissionHandler.hack ((string)$decision). Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index b882c5ef4..d6d62d675 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -444,6 +444,7 @@ public static class Details { private String mcpClientInferredBehavior; private Boolean destructive; private String source; + private String decision; } @Data From 2ec79ad6f626a3472b5d527154cf035920c37c6f Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:04:41 -0700 Subject: [PATCH 092/100] feat: add audit MCP permission_key property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.permissionKey (String) — MCP permission key (e.g. "github:search_code"), confirmed from McpToolPermissionHandler.hack. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index d6d62d675..d90ace8ab 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -445,6 +445,7 @@ public static class Details { private Boolean destructive; private String source; private String decision; + private String permissionKey; } @Data From e5b4e72c4cae4541179efeea359316640a5bb6e6 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:15:21 -0700 Subject: [PATCH 093/100] feat: add audit MCP added_to_allow property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.addedToAllow (List) — MCP permission keys added to the allow list. It is a vec of keys, not a boolean, confirmed from api_handlers/users_prefs_set.hack (Vec\diff -> foreach key). Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index d90ace8ab..e6dccc0a6 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -446,6 +446,7 @@ public static class Details { private String source; private String decision; private String permissionKey; + private List addedToAllow; } @Data From cba512331d408c63a38537794203364655385591 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:26:01 -0700 Subject: [PATCH 094/100] feat: add audit MCP connectors_enabled property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.connectorsEnabled (List) — MCP connector keys enabled; a vec (Vec\diff), not a boolean, confirmed from api_handlers/users_prefs_set.hack. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index e6dccc0a6..8f22545de 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -447,6 +447,7 @@ public static class Details { private String decision; private String permissionKey; private List addedToAllow; + private List connectorsEnabled; } @Data From d701835cf50ff1837660312def07e7adf19e6fb1 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:36:36 -0700 Subject: [PATCH 095/100] feat: add audit MCP connectors_disabled property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.connectorsDisabled (List) — MCP connector keys disabled; the Vec\diff pair to connectorsEnabled, confirmed from api_handlers/users_prefs_set.hack. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 8f22545de..bbd0e383d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -448,6 +448,7 @@ public static class Details { private String permissionKey; private List addedToAllow; private List connectorsEnabled; + private List connectorsDisabled; } @Data From 17e7450d767c84f9e0bf0c9ef6805b5a475fc893 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:47:04 -0700 Subject: [PATCH 096/100] feat: add audit MCP uri property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.uri (String) — MCP resource URI; string across all webapp MCP shapes (e.g. slackbot_mcp_readResource). Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index bbd0e383d..36220cf0a 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -449,6 +449,7 @@ public static class Details { private List addedToAllow; private List connectorsEnabled; private List connectorsDisabled; + private String uri; } @Data From 134abec430188e5eaad649cd7fad8da96a07803b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 02:57:19 -0700 Subject: [PATCH 097/100] feat: add audit MCP executor_id property MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LogsResponse.Details.executorId (String) — MCP executor id; string in all webapp MCP arg shapes (e.g. slackbot_mcp_callTool_args). Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index 36220cf0a..c5e478f6d 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -450,6 +450,7 @@ public static class Details { private List connectorsEnabled; private List connectorsDisabled; private String uri; + private String executorId; } @Data From 51f3a7acd5170cae30d8e6953dba414f195a2d42 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 03:12:46 -0700 Subject: [PATCH 098/100] feat: add audit skill_id property LogsResponse.Details.skillId (String). Additive, no breaking changes; type verified against the live audit API response. Co-Authored-By: Claude --- .../src/main/java/com/slack/api/audit/response/LogsResponse.java | 1 + 1 file changed, 1 insertion(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index c5e478f6d..c227cd9e0 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -451,6 +451,7 @@ public static class Details { private List connectorsDisabled; private String uri; private String executorId; + private String skillId; } @Data From c1392754bf3dcf742dd7fad04c1c9833da43df02 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 03:56:33 -0700 Subject: [PATCH 099/100] feat: add reqMethod to workflows step responses; fix audit FieldsTest - WorkflowsStepCompletedResponse / WorkflowsStepFailedResponse / WorkflowsUpdateStepResponse: add reqMethod (String). These legacy Steps-from-Apps methods now return unknown_method with a req_method field echoing the requested method; without it deserialization throws JsonParseException. Additive, no breaking changes. - FieldsTest.logs: ignore the new Context getters (actingAgent, agentMessage) in the recursive non-null check, matching the existing sessionId ignore. Verified locally: FieldsTest passes (3/3). Co-Authored-By: Claude --- json-logs/samples/api/auth.test.json | 3 ++- .../samples/api/slackLists.items.create.json | 18 ++++++++++++++++- .../samples/api/slackLists.items.info.json | 20 ++++++++++++++++++- .../samples/api/users.conversations.json | 12 ++++++----- json-logs/samples/api/users.list.json | 13 +++++++++++- .../WorkflowsStepCompletedResponse.java | 1 + .../WorkflowsStepFailedResponse.java | 1 + .../WorkflowsUpdateStepResponse.java | 1 + .../test_locally/api/audit/FieldsTest.java | 5 ++++- 9 files changed, 64 insertions(+), 10 deletions(-) diff --git a/json-logs/samples/api/auth.test.json b/json-logs/samples/api/auth.test.json index 47cefaa0b..6eebbe105 100644 --- a/json-logs/samples/api/auth.test.json +++ b/json-logs/samples/api/auth.test.json @@ -13,5 +13,6 @@ "provided": "", "enterprise_id": "E00000000", "app_name": "", - "app_id": "A00000000" + "app_id": "A00000000", + "expires_in": 12345 } \ No newline at end of file diff --git a/json-logs/samples/api/slackLists.items.create.json b/json-logs/samples/api/slackLists.items.create.json index 0a315ed3b..94cfa37ad 100644 --- a/json-logs/samples/api/slackLists.items.create.json +++ b/json-logs/samples/api/slackLists.items.create.json @@ -25,9 +25,25 @@ ] } ] + }, + { + "type": "", + "block_id": "", + "elements": [ + { + "type": "", + "elements": [ + { + "text": "", + "type": "" + } + ] + } + ] } ], - "checkbox": false + "checkbox": false, + "text": "" } ], "updated_timestamp": "" diff --git a/json-logs/samples/api/slackLists.items.info.json b/json-logs/samples/api/slackLists.items.info.json index 247e4cdde..7aa330a46 100644 --- a/json-logs/samples/api/slackLists.items.info.json +++ b/json-logs/samples/api/slackLists.items.info.json @@ -151,7 +151,25 @@ "key": "", "value": false, "checkbox": false, - "column_id": "" + "column_id": "", + "text": "", + "rich_text": [ + { + "type": "", + "block_id": "", + "elements": [ + { + "type": "", + "elements": [ + { + "text": "", + "type": "" + } + ] + } + ] + } + ] } ], "updated_timestamp": "", diff --git a/json-logs/samples/api/users.conversations.json b/json-logs/samples/api/users.conversations.json index 521ba1c7d..924b7c5b0 100644 --- a/json-logs/samples/api/users.conversations.json +++ b/json-logs/samples/api/users.conversations.json @@ -92,10 +92,11 @@ "is_disabled": false }, { - "type": "", - "label": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" } @@ -114,13 +115,14 @@ "is_disabled": false }, { - "type": "", "id": "", + "label": "", + "type": "", "data": { + "folder_bookmark_id": "", "file_id": "F00000000", "shared_ts": "0000000000.000000" - }, - "label": "" + } } ], "meeting_notes": { diff --git a/json-logs/samples/api/users.list.json b/json-logs/samples/api/users.list.json index cb67a10dd..d330bae17 100644 --- a/json-logs/samples/api/users.list.json +++ b/json-logs/samples/api/users.list.json @@ -67,7 +67,18 @@ "has_2fa": false, "two_factor_type": "", "is_workflow_bot": false, - "locale": "" + "locale": "", + "enterprise_user": { + "id": "U00000000", + "enterprise_id": "E00000000", + "enterprise_name": "", + "is_admin": false, + "is_owner": false, + "is_primary_owner": false, + "teams": [ + "" + ] + } } ], "cache_ts": 12345, diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepCompletedResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepCompletedResponse.java index cb75b8072..53e549ad9 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepCompletedResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepCompletedResponse.java @@ -14,5 +14,6 @@ public class WorkflowsStepCompletedResponse implements SlackApiTextResponse { private String error; private String needed; private String provided; + private String reqMethod; private transient Map> httpResponseHeaders; } diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepFailedResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepFailedResponse.java index e13dc3f51..c5567ec40 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepFailedResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsStepFailedResponse.java @@ -14,5 +14,6 @@ public class WorkflowsStepFailedResponse implements SlackApiTextResponse { private String error; private String needed; private String provided; + private String reqMethod; private transient Map> httpResponseHeaders; } diff --git a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsUpdateStepResponse.java b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsUpdateStepResponse.java index a96ec9625..4f0453c72 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsUpdateStepResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/response/workflows/WorkflowsUpdateStepResponse.java @@ -14,5 +14,6 @@ public class WorkflowsUpdateStepResponse implements SlackApiTextResponse { private String error; private String needed; private String provided; + private String reqMethod; private transient Map> httpResponseHeaders; } diff --git a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java index 4ecfc1776..6c7a9589f 100644 --- a/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/audit/FieldsTest.java @@ -32,7 +32,10 @@ public void logs() throws Exception { verifyIfAllGettersReturnNonNullRecursively(obj.getResponseMetadata(), "getMessages", "getWarnings"); verifyIfAllGettersReturnNonNull(obj.getEntries().get(0), "getDetails"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getActor(), "getAccountType"); - verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getContext(), "getSessionId"); + verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getContext(), + "getSessionId", + "getActingAgent", + "getAgentMessage"); verifyIfAllGettersReturnNonNullRecursively(obj.getEntries().get(0).getEntity(), "getAccountType", "getApp", From 7331cdf8ff9b069a6ce78555ee1c5b447e1f14c5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 30 Jun 2026 04:07:46 -0700 Subject: [PATCH 100/100] feat: add toolName to AppActivity payload and audit allowlist domains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AppActivity.Payload.toolName (String) — MCP tool name in admin app activity payloads. Additive, no breaking changes. - LogsResponse.Details.mcpServerAllowlistDomains (List) — MCP server allowlist domain URLs. Additive; verified as a list of strings. Co-Authored-By: Claude --- .../main/java/com/slack/api/audit/response/LogsResponse.java | 1 + .../src/main/java/com/slack/api/model/admin/AppActivity.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java index c227cd9e0..6a503ccb9 100644 --- a/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java +++ b/slack-api-client/src/main/java/com/slack/api/audit/response/LogsResponse.java @@ -452,6 +452,7 @@ public static class Details { private String uri; private String executorId; private String skillId; + private List mcpServerAllowlistDomains; } @Data diff --git a/slack-api-model/src/main/java/com/slack/api/model/admin/AppActivity.java b/slack-api-model/src/main/java/com/slack/api/model/admin/AppActivity.java index 658497cd7..877a4d8e3 100644 --- a/slack-api-model/src/main/java/com/slack/api/model/admin/AppActivity.java +++ b/slack-api-model/src/main/java/com/slack/api/model/admin/AppActivity.java @@ -57,6 +57,8 @@ public static class Payload { private String details; // "{\"expression\":\"\",\"expression_attributes\":{},\"expression_values\":{},\"limit\":1000,\"cursor\":\"\"}" private String requestType; // "query" private String datastoreName; + + private String toolName; } @Data