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.
Example

IClientFactory

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
The account this client was created with.
Uri
The server URL, derived from Account.serverInfo.url.
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.
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

ProjectResource
ModelResource
VersionResource
ActiveUserResource
OtherUserResource
WorkspaceResource
See WorkspaceResource. Workspace features require a workspace-enabled server, such as app.speckle.systems.
ServerResource
ModelIngestionResource
Connector-scale model ingestion lifecycle. See ModelIngestionResource.
ProjectInviteResource
Create, look up, and cancel project invitations.
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:
Example

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 18, 2026