# API reference — C# API (AR51.Net)

The public API of the **`AR51.Net`** .NET library, described from the caller's side: what you call and what you receive. New to AR51.Net? Start with the [overview](/docs/csharp-api/overview/) and the [quickstart](/docs/csharp-api/install/).

<div className="apiTable">

| | |
|---|---|
| **Package** | NuGet `AR51.Net` |
| **Version** | `3.0.302` (3.0.3.2R) — numbered the same as the AR 51 Unity SDK |
| **Namespace** | `AR51.Net` (the only one) |
| **Targets** | .NET 8 and .NET 10 |
| **Dependencies** | `Google.Protobuf`, `Grpc.Net.Client`, `Microsoft.Extensions.Logging.Abstractions` — all managed, no native libraries |
| **Entry point** | [`AR51Client.Create`](/docs/sdk-api/csharp-api/classes/ar51client/#create) → [`IAR51Client`](/docs/sdk-api/csharp-api/classes/iar51client/) |

</div>

:::tip[Looking for a specific type?]
The **[Class index](/docs/sdk-api/csharp-api/classes/)** lists all 52 public types. The table below groups the main ones by area.
:::

## Areas

<div className="apiTable">

| Area | Main types | Covers |
|---|---|---|
| [Connecting](/docs/csharp-api/connecting/) | [`AR51Client`](/docs/sdk-api/csharp-api/classes/ar51client/), [`AR51ClientOptions`](/docs/sdk-api/csharp-api/classes/ar51clientoptions/), [`IAR51Client`](/docs/sdk-api/csharp-api/classes/iar51client/), [`AR51Exception`](/docs/sdk-api/csharp-api/classes/ar51exception/) | The entry point. Create one `IAR51Client` with `AR51Client.Create`, subscribe to what you need, then call `StartAsync`. |
| [Skeletons](/docs/csharp-api/skeletons/) | [`ISkeletonClient`](/docs/sdk-api/csharp-api/classes/iskeletonclient/), [`SkeletonClient`](/docs/sdk-api/csharp-api/classes/skeletonclient/), [`Skeleton`](/docs/sdk-api/csharp-api/classes/skeleton/), [`HandPose`](/docs/sdk-api/csharp-api/classes/handpose/) | Live skeletons of the tracked people: 25 body joints with confidence, hands from hand-tracking headsets, identity and timing. |
| [Object detection](/docs/csharp-api/objects/) | [`IObjectDetectionClient`](/docs/sdk-api/csharp-api/classes/iobjectdetectionclient/), [`ObjectDetectionClient`](/docs/sdk-api/csharp-api/classes/objectdetectionclient/), [`TrackedObject`](/docs/sdk-api/csharp-api/classes/trackedobject/) | Live tracked objects (for example props) with position and rotation. Works exactly like the skeleton client. |
| [Servers](/docs/csharp-api/servers-and-devices/) | [`IServerClient`](/docs/sdk-api/csharp-api/classes/iserverclient/) | The AR 51 server machines: status, launching and quitting the server program, starting and stopping tracking. |
| [Cameras](/docs/csharp-api/cameras/) | [`ICameraClient`](/docs/sdk-api/csharp-api/classes/icameraclient/), [`CameraInfo`](/docs/sdk-api/csharp-api/classes/camerainfo/), [`CameraSettings`](/docs/sdk-api/csharp-api/classes/camerasettings/) | Camera list with calibration values, live JPEG preview, image settings and auto-tune. |
| [Calibration](/docs/csharp-api/calibration/) | [`ICalibrationClient`](/docs/sdk-api/csharp-api/classes/icalibrationclient/), [`CaptureBounds`](/docs/sdk-api/csharp-api/classes/capturebounds/) | Camera calibration and the tracked area (capture bounds). |
| [Recording](/docs/csharp-api/recording/) | [`IRecordingClient`](/docs/sdk-api/csharp-api/classes/irecordingclient/) | Recording tracking data and camera video on the servers. |
| [Devices](/docs/csharp-api/servers-and-devices/) | [`IDeviceClient`](/docs/sdk-api/csharp-api/classes/ideviceclient/) | The apps and devices connected to the system: headsets, apps, phones and Mocap Studio. |

</div>

## Conventions at a glance

- **Units and axes:** meters; left-handed **X right, Y up, Z forward** (the same axes as Unity). Rotations are `System.Numerics.Quaternion`.
- **Time:** `CaptureTime` is the server's clock in UTC; `ReceivedTime` is your local clock.
- **Threading:** every member is safe to call from any thread. `SkeletonReceived` and `ObjectReceived` run on the stream's background thread — keep them short. All other events are raised one at a time, in order, on one background thread per client.
- **Errors:** failed calls throw [`AR51Exception`](/docs/sdk-api/csharp-api/classes/ar51exception/) with an [`AR51ErrorCode`](/docs/sdk-api/csharp-api/classes/ar51exception/#ar51errorcode). Cancellation throws `OperationCanceledException`; use after dispose throws `ObjectDisposedException`.

Details: [Data conventions, threading and errors](/docs/csharp-api/conventions/).

:::note[Scope]
This reference documents the public contract only. Internal implementation and wire-level types are not published.
:::
