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 01/51] 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 02/51] 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 03/51] 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 04/51] 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 05/51] 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 06/51] 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 07/51] 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 08/51] 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 09/51] 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 10/51] 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 11/51] 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 12/51] 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 13/51] 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 14/51] 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 15/51] 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 16/51] 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 17/51] 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 18/51] 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 19/51] 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 20/51] 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 21/51] 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 22/51] 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 23/51] 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 24/51] 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 25/51] 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 26/51] 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 27/51] 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 28/51] 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 29/51] 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 30/51] 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 31/51] 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 32/51] 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 33/51] 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 34/51] 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 35/51] 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 36/51] 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 37/51] 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 38/51] 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 39/51] 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 40/51] 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 41/51] 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 42/51] 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 43/51] 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 44/51] 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 45/51] 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 46/51] 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 47/51] 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 48/51] 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 49/51] 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 50/51] 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 51/51] 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": {