Logitech.Api is a .NET 10 client library for the Logitech Sync Cloud API.
The current OpenAPI definition in this repository documents a single endpoint:
GET /org/{orgId}/place
This library is designed around that contract, with strongly typed models, mTLS support, and safety controls for write operations.
OpenAPI source used by this package: Docs/openapi-spec
dotnet add package Logitech.Api- .NET 10 SDK/runtime
- A Logitech Sync organization ID
- A valid client certificate for Logitech Sync API mTLS authentication
using Logitech.Api;
using System.Security.Cryptography.X509Certificates;
var certificate = X509CertificateLoader.LoadPkcs12FromFile(
"path/to/logitech-client-certificate.pfx",
"certificate-password");
using var httpClient = new HttpClient
{
BaseAddress = new Uri("https://api.sync.logitech.com/v1/")
};
var client = new LogitechSyncClient(
httpClient,
new LogitechSyncClientOptions
{
ClientCertificate = certificate,
IsWritePermitted = false
});
var response = await client.Places.GetAsync(
orgId: "YOUR_ORG_ID",
limit: 100,
rooms: true,
desks: true,
unlicensed: false,
projection: "place.info,place.occupancy,place.device,place.device.info,place.device.status");| Property | Endpoint | Description |
|---|---|---|
Places |
GET /org/{orgId}/place |
Returns rooms/desks and optionally nested device information |
| Parameter | Type | Description |
|---|---|---|
orgId |
string |
Required organization ID |
continuation |
string? |
Pagination token returned by previous call |
limit |
int? |
Max results per page (1-1000) |
rooms |
bool? |
Include rooms |
desks |
bool? |
Include desks |
unlicensed |
bool? |
Include unlicensed places with basic fields |
projection |
string? |
Comma-separated field projection list |
LogitechSyncClientOptions.IsWritePermitted defaults to false.
When false, the internal handler blocks all outgoing POST, PUT, PATCH, and DELETE requests with an InvalidOperationException.
This helps prevent accidental mutations when running in read-only mode.
Based on the OpenAPI definition, you should expect at least:
400 Bad Requestfor invalid query parameters403 Forbiddenfor invalid/expired certificates or organization access429 Too Many Requestswhen quota/rate limits are exceeded
The API documentation recommends implementing retries with exponential backoff for throttled (429) responses.
This repository includes both unit tests and integration tests.
Integration tests use user-secrets. Configure the following values:
{
"Logitech": {
"OrgId": "YOUR_ORG_ID",
"Certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"PrivateKey": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
}Reference files:
Run tests:
dotnet test Logitech.Api.Test/Logitech.Api.Test.csproj -v minimalCollect coverage:
dotnet test Logitech.Api.Test/Logitech.Api.Test.csproj -v minimal --collect:"XPlat Code Coverage"This project is licensed under the MIT License. See LICENSE.
Copyright (c) 2026 Panoramic Data Limited. All rights reserved.