Skip to main content
Use IClient to work with Speckle Server metadata — list projects and models, fetch versions, and check what the server supports. Pair it with IOperations when you need to load or publish the actual object graph (Receive2, Send2). When to use it: after Authentication. Guides first: Build your first model analysis tool shows a full workflow; use this page for method signatures.
https://mintcdn.com/speckle/VtRPWzmN-ULoLfIv/images/developers/sdks/csharp.svg?fit=max&auto=format&n=VtRPWzmN-ULoLfIv&q=85&s=f2970e3b8bd4a2c7899b46211a42f251Example
using var client = provider.GetRequiredService<IClientFactory>().Create(account);

IClientFactory

Create
IClient Create(Account account)
Builds an authenticated IClient for the given account. The returned client owns a GraphQLHttpClient and should be disposed when no longer needed.

IClient

Account
Account
The account this client was created with.
ServerUrl
Uri
The server URL, derived from Account.serverInfo.url.
GQLClient
GraphQLHttpClient
The underlying GraphQL HTTP client. Use resource properties below for typed access; drop down to this only for queries not yet covered by a resource.
InitializeWebsocket
Task InitializeWebsocket()
Ensures the GraphQL websocket connection is established. Only needed before subscriptions; not calling it first just means the first subscription takes slightly longer to activate.

Resources

Project
ProjectResource
Model
ModelResource
Version
VersionResource
ActiveUser
ActiveUserResource
OtherUser
OtherUserResource
Workspace
WorkspaceResource
See WorkspaceResource. Workspace features require a workspace-enabled server, such as app.speckle.systems.
Server
ServerResource
Ingestion
ModelIngestionResource
Connector-scale model ingestion lifecycle. See ModelIngestionResource.
ProjectInvite
ProjectInviteResource
Create, look up, and cancel project invitations.
Subscription
SubscriptionResource
GraphQL subscriptions for real-time updates.
Comment and FileImport resources exist on IClient for backward compatibility but their methods are largely obsolete — comments are being replaced by Issues (not yet exposed in this SDK), and FileImport is being reworked. Avoid building new features on them.

Disposal

IClient implements IDisposable and owns network resources (the GraphQL HTTP client and, if used, a websocket connection). Always dispose it, typically with a using statement:
https://mintcdn.com/speckle/VtRPWzmN-ULoLfIv/images/developers/sdks/csharp.svg?fit=max&auto=format&n=VtRPWzmN-ULoLfIv&q=85&s=f2970e3b8bd4a2c7899b46211a42f251Example
using var client = provider.GetRequiredService<IClientFactory>().Create(account);

Error Handling

GraphQL calls automatically retry transient failures. Unrecoverable errors surface as exceptions — see Exceptions.

FAQ

Yes — IClient is scoped to an account, not a project. Pass different projectId values to resource methods as needed.
Call client.Server.IsWorkspaceEnabled(). See Handling server capabilities.
No — it’s called automatically the first time you subscribe. Call it explicitly only if you want to avoid the ~100ms delay on your first subscription.

Next Steps

Build your first model analysis tool

End-to-end workflow with IClient and Receive2

Operations

Load and publish object graphs

Core concepts

Projects, models, versions
Last modified on July 10, 2026