# Viam's Client APIs

Every Viam resource exposes an [application programming interface (API)](https://en.wikipedia.org/wiki/API) described through [protocol buffers](https://developers.google.com/protocol-buffers).

The API methods provided by the SDKs for each of these resource APIs wrap gRPC client requests to the machine when you execute your program, providing you a convenient interface for accessing information about and controlling the resources you have [configured](https://docs.viam.com/hardware/configure-hardware/) on your machine.

## Platform APIs

- [Fleet Management API](https://docs.viam.com/reference/apis/fleet/)
  
  Create and manage organizations, locations, and machines, get logs from individual machines, and manage fragments and permissions.
- [Data Client API](https://docs.viam.com/reference/apis/data-client/)
  
  Upload, download, filter, tag or perform other tasks on data like images or sensor readings.
- [Machine Management API](https://docs.viam.com/reference/apis/robot/)
  
  Manage your machines: connect to your machine, retrieve status information, and send commands remotely.
- [ML Training Client API](https://docs.viam.com/reference/apis/ml-training-client/)
  
  Submit and manage ML training jobs running on Viam.
- [Billing Client API](https://docs.viam.com/reference/apis/billing-client/)
  
  Retrieve billing information from Viam.
- [Session Management API](https://docs.viam.com/reference/apis/sessions/)
  
  Manage sessions, heartbeats, and safety timeouts for connected clients.

## Component APIs

These APIs provide interfaces for controlling and getting information from the components of a machine:

- [Component APIs overview](https://docs.viam.com/reference/apis/components/overview/)
  
  See every component API and its methods at a glance in one compact grid.
- [Arm API](https://docs.viam.com/reference/apis/components/arm/)
  
  Give commands to your arm components for linear motion planning.
- [Audio in API](https://docs.viam.com/reference/apis/components/audio-in/)
  
  Give commands to your audio in components.
- [Audio out API](https://docs.viam.com/reference/apis/components/audio-out/)
  
  Give commands to your audio out components.
- [Base API](https://docs.viam.com/reference/apis/components/base/)
  
  Give commands for moving all configured components attached to a mobile platform as a whole without needing to send commands to individual components.
- [Board API](https://docs.viam.com/reference/apis/components/board/)
  
  Give commands for setting GPIO pins to high or low, setting PWM, and working with analog and digital interrupts.
- [Button API](https://docs.viam.com/reference/apis/components/button/)
  
  Give commands for getting presses from a physical button.
- [Camera API](https://docs.viam.com/reference/apis/components/camera/)
  
  Give commands for getting images or point clouds.
- [Encoder API](https://docs.viam.com/reference/apis/components/encoder/)
  
  Give commands for getting the position of a motor or a joint in ticks or degrees.
- [Gantry API](https://docs.viam.com/reference/apis/components/gantry/)
  
  Give commands for coordinated control of one or more linear actuators.
- [Generic API](https://docs.viam.com/reference/apis/components/generic/)
  
  Give commands for running custom model-specific commands using DoCommand on your generic components.
- [Gripper API](https://docs.viam.com/reference/apis/components/gripper/)
  
  Give commands for opening and closing a gripper device.
- [Input controller API](https://docs.viam.com/reference/apis/components/input-controller/)
  
  Give commands to register callbacks for events, allowing you to use input devices to control your machines.
- [Motor API](https://docs.viam.com/reference/apis/components/motor/)
  
  Give commands to operate a motor or get its current status.
- [Movement sensor API](https://docs.viam.com/reference/apis/components/movement-sensor/)
  
  Give commands for getting the current GPS location, linear velocity and acceleration, angular velocity and acceleration and heading.
- [Power sensor API](https://docs.viam.com/reference/apis/components/power-sensor/)
  
  Commands for getting measurements of voltage, current, and power consumption.
- [Sensor API](https://docs.viam.com/reference/apis/components/sensor/)
  
  Give commands for getting sensor readings.
- [Servo API](https://docs.viam.com/reference/apis/components/servo/)
  
  Give commands for controlling the angular position of a servo precisely or getting its current status.
- [Switch API](https://docs.viam.com/reference/apis/components/switch/)
  
  Give commands for getting the state of a physical switch that has two or more discrete positions.

## Service APIs

These APIs provide interfaces for controlling and getting information from the services you configured on a machine.

- [Service APIs overview](https://docs.viam.com/reference/apis/services/overview/)
  
  See every service API and its methods at a glance in one compact grid.
- [Data management service API](https://docs.viam.com/reference/apis/services/data/)
  
  Give commands to your data management service to sync data stored on the machine it is deployed on to the cloud.
- [Vision service API](https://docs.viam.com/reference/apis/services/vision/)
  
  Give commands to get detections, classifications, or point cloud objects, depending on the ML model the vision service is using.
- [ML model service API](https://docs.viam.com/reference/apis/services/ml/)
  
  Give commands to your ML model service to make inferences based on a provided ML model.
- [Motion service API](https://docs.viam.com/reference/apis/services/motion/)
  
  Give commands to move a machine's components from one location or pose to another.
- [Navigation service API](https://docs.viam.com/reference/apis/services/navigation/)
  
  The navigation service API has been removed.
- [Generic service API](https://docs.viam.com/reference/apis/services/generic/)
  
  Give commands to your generic components for running model-specific commands using DoCommand.
- [Base Remote Control service API](https://docs.viam.com/reference/apis/services/base-rc/)
  
  Give commands to get a list of inputs from the controller that are being monitored for that control mode.
- [Discovery service API](https://docs.viam.com/reference/apis/services/discovery/)
  
  Reveal which resources are available to configure on a machine based on the hardware that is physically present.
- [World state store service API](https://docs.viam.com/reference/apis/services/world-state-store/)
  
  Retrieve a list of world objects.
