SCIM API rate limits apply to all SCIM apps within an organization, rather than on a per-app basis.
Synchronous vs. Asynchronous Clients
SCIMClient (Synchronous): Sends requests immediately and does not manage burst traffic.AsyncSCIMClient (Asynchronous): Designed with rate limits in mind. It uses internal queuing to avoid burst traffic and can delay requests to prevent hitting rate limits.
Metrics and Rate Limit Estimation
Both sync and async clients share a MetricsDatastore to track traffic generated toward the Slack platform. This allows the AsyncSCIMClient to estimate remaining capacity and adjust request timing. By default, this datastore is an in-memory implementation using the JVM heap.
To use the asynchronous client, use slack.scimAsync(token) which returns CompletableFuture objects for API calls.
import com.slack.api.Slack;
import com.slack.api.scim.response.*;
import java.util.concurrent.CompletableFuture;
Slack slack = Slack.getInstance();
String token = "xoxp-***"; // Org admin user token
CompletableFuture<UsersSearchResponse> users = slack.scimAsync(token).searchUsers(req -> req
.startIndex(1)
.count(100)
.filter("userName Eq \"Carly\"")
);