openapi: 3.1.0 info: title: Viam Component APIs description: | REST/JSON transcoding of every Viam Component gRPC API — the hardware abstraction layer that lets any client speak the same uniform contract to motors, cameras, arms, sensors, and every other supported component class regardless of model. Canonical contracts: https://github.com/viamrobotics/api/tree/main/proto/viam/component Every component exposes DoCommand (model-specific extension), GetStatus, and GetGeometries in addition to its class-specific operations. version: '2026.05' contact: name: Viam Support url: https://www.viam.com/contact servers: - url: https://{machine_address} description: Per-machine viam-server endpoint. variables: machine_address: default: machine.local.viam.cloud:443 security: - ApiKeyAuth: [] tags: - name: Arm description: Robotic arms — joint and end-effector control. - name: Audio In description: Audio capture devices. - name: Audio Out description: Audio playback devices. - name: Base description: Mobile platforms (wheeled, tracked). - name: Board description: GPIO boards (Raspberry Pi, Jetson, ESP32). - name: Button description: Physical buttons. - name: Camera description: 2D image and 3D point cloud sources. - name: Encoder description: Position encoders. - name: Gantry description: Linear actuator coordination. - name: Generic description: Custom component with DoCommand-only interface. - name: Gripper description: End-effector grippers. - name: Motor description: DC, servo, and stepper motors. - name: Movement Sensor description: GPS, IMU, odometry. - name: Power Sensor description: Voltage, current, and power measurements. - name: Sensor description: Generic sensor readings. - name: Servo description: Angular-position servos. - name: Switch description: Multi-position switches. paths: /viam.component.arm.v1.ArmService/GetEndPosition: post: summary: Viam Arm Get End Position description: Get the pose of the arm's end effector. operationId: armGetEndPosition tags: [Arm] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.arm.v1.ArmService/MoveToPosition: post: summary: Viam Arm Move To Position description: Move the arm's end effector to a target pose. operationId: armMoveToPosition tags: [Arm] requestBody: required: true content: application/json: schema: type: object required: [name, to] properties: { name: { type: string }, to: { type: object } } responses: { '200': { description: Successful response. } } /viam.component.arm.v1.ArmService/GetJointPositions: post: summary: Viam Arm Get Joint Positions description: Get the arm's current joint positions. operationId: armGetJointPositions tags: [Arm] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.arm.v1.ArmService/MoveToJointPositions: post: summary: Viam Arm Move To Joint Positions description: Move the arm to a specific joint configuration. operationId: armMoveToJointPositions tags: [Arm] requestBody: required: true content: application/json: schema: type: object required: [name, positions] properties: { name: { type: string }, positions: { type: object } } responses: { '200': { description: Successful response. } } /viam.component.arm.v1.ArmService/Stop: post: summary: Viam Arm Stop description: Stop the arm. operationId: armStop tags: [Arm] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.base.v1.BaseService/MoveStraight: post: summary: Viam Base Move Straight description: Move the base a specified distance at a velocity. operationId: baseMoveStraight tags: [Base] requestBody: required: true content: application/json: schema: type: object required: [name, distance_mm, mm_per_sec] properties: { name: { type: string }, distance_mm: { type: integer }, mm_per_sec: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.base.v1.BaseService/Spin: post: summary: Viam Base Spin description: Spin the base by an angle at an angular velocity. operationId: baseSpin tags: [Base] requestBody: required: true content: application/json: schema: type: object required: [name, angle_deg, degs_per_sec] properties: { name: { type: string }, angle_deg: { type: number }, degs_per_sec: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.base.v1.BaseService/SetPower: post: summary: Viam Base Set Power description: Set linear and angular power for the base. operationId: baseSetPower tags: [Base] requestBody: required: true content: application/json: schema: type: object required: [name, linear, angular] properties: { name: { type: string }, linear: { type: object }, angular: { type: object } } responses: { '200': { description: Successful response. } } /viam.component.base.v1.BaseService/SetVelocity: post: summary: Viam Base Set Velocity description: Set linear and angular velocity for the base. operationId: baseSetVelocity tags: [Base] requestBody: required: true content: application/json: schema: type: object required: [name, linear, angular] properties: { name: { type: string }, linear: { type: object }, angular: { type: object } } responses: { '200': { description: Successful response. } } /viam.component.base.v1.BaseService/Stop: post: summary: Viam Base Stop description: Stop the base. operationId: baseStop tags: [Base] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.board.v1.BoardService/SetGPIO: post: summary: Viam Board Set Gpio description: Set a GPIO pin high or low. operationId: boardSetGPIO tags: [Board] requestBody: required: true content: application/json: schema: type: object required: [name, pin, high] properties: { name: { type: string }, pin: { type: string }, high: { type: boolean } } responses: { '200': { description: Successful response. } } /viam.component.board.v1.BoardService/GetGPIO: post: summary: Viam Board Get Gpio description: Read a GPIO pin's current value. operationId: boardGetGPIO tags: [Board] requestBody: required: true content: application/json: schema: type: object required: [name, pin] properties: { name: { type: string }, pin: { type: string } } responses: { '200': { description: Successful response. } } /viam.component.board.v1.BoardService/SetPWM: post: summary: Viam Board Set Pwm description: Set a pin's PWM duty cycle. operationId: boardSetPWM tags: [Board] requestBody: required: true content: application/json: schema: type: object required: [name, pin, duty_cycle_pct] properties: { name: { type: string }, pin: { type: string }, duty_cycle_pct: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.board.v1.BoardService/ReadAnalogReader: post: summary: Viam Board Read Analog Reader description: Read a value from an analog reader. operationId: boardReadAnalogReader tags: [Board] requestBody: required: true content: application/json: schema: type: object required: [board_name, analog_reader_name] properties: { board_name: { type: string }, analog_reader_name: { type: string } } responses: { '200': { description: Successful response. } } /viam.component.board.v1.BoardService/StreamTicks: post: summary: Viam Board Stream Ticks description: Stream digital interrupt ticks for the given pin names. operationId: boardStreamTicks tags: [Board] requestBody: required: true content: application/json: schema: type: object required: [name, pin_names] properties: { name: { type: string }, pin_names: { type: array, items: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.button.v1.ButtonService/Push: post: summary: Viam Button Push description: Trigger a button press programmatically. operationId: buttonPush tags: [Button] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.camera.v1.CameraService/GetImages: post: summary: Viam Camera Get Images description: Capture one or more images from the camera. operationId: cameraGetImages tags: [Camera] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.camera.v1.CameraService/GetPointCloud: post: summary: Viam Camera Get Point Cloud description: Capture a 3D point cloud from the camera. operationId: cameraGetPointCloud tags: [Camera] requestBody: required: true content: application/json: schema: type: object required: [name, mime_type] properties: { name: { type: string }, mime_type: { type: string } } responses: { '200': { description: Successful response. } } /viam.component.camera.v1.CameraService/GetProperties: post: summary: Viam Camera Get Properties description: Get camera intrinsics and supported MIME types. operationId: cameraGetProperties tags: [Camera] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.encoder.v1.EncoderService/GetPosition: post: summary: Viam Encoder Get Position description: Read the encoder's current position. operationId: encoderGetPosition tags: [Encoder] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.encoder.v1.EncoderService/ResetPosition: post: summary: Viam Encoder Reset Position description: Reset the encoder's zero position. operationId: encoderResetPosition tags: [Encoder] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.gantry.v1.GantryService/MoveToPosition: post: summary: Viam Gantry Move To Position description: Move the gantry axes to specified positions. operationId: gantryMoveToPosition tags: [Gantry] requestBody: required: true content: application/json: schema: type: object required: [name, positions_mm] properties: { name: { type: string }, positions_mm: { type: array, items: { type: number } } } responses: { '200': { description: Successful response. } } /viam.component.gantry.v1.GantryService/Home: post: summary: Viam Gantry Home description: Home the gantry. operationId: gantryHome tags: [Gantry] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.gripper.v1.GripperService/Open: post: summary: Viam Gripper Open description: Open the gripper. operationId: gripperOpen tags: [Gripper] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.gripper.v1.GripperService/Grab: post: summary: Viam Gripper Grab description: Close the gripper and report whether anything was grasped. operationId: gripperGrab tags: [Gripper] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.gripper.v1.GripperService/IsHoldingSomething: post: summary: Viam Gripper Is Holding Something description: Check whether the gripper is currently holding something. operationId: gripperIsHoldingSomething tags: [Gripper] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/SetPower: post: summary: Viam Motor Set Power description: Set the motor's power as a signed fraction of full power. operationId: motorSetPower tags: [Motor] requestBody: required: true content: application/json: schema: type: object required: [name, power_pct] properties: { name: { type: string }, power_pct: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/GoFor: post: summary: Viam Motor Go For description: Spin the motor at an RPM for a specified number of revolutions. operationId: motorGoFor tags: [Motor] requestBody: required: true content: application/json: schema: type: object required: [name, rpm, revolutions] properties: { name: { type: string }, rpm: { type: number }, revolutions: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/GoTo: post: summary: Viam Motor Go To description: Move the motor to a target position at an RPM. operationId: motorGoTo tags: [Motor] requestBody: required: true content: application/json: schema: type: object required: [name, rpm, position_revolutions] properties: { name: { type: string }, rpm: { type: number }, position_revolutions: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/SetRPM: post: summary: Viam Motor Set Rpm description: Spin the motor continuously at the requested RPM. operationId: motorSetRPM tags: [Motor] requestBody: required: true content: application/json: schema: type: object required: [name, rpm] properties: { name: { type: string }, rpm: { type: number } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/Stop: post: summary: Viam Motor Stop description: Stop the motor. operationId: motorStop tags: [Motor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.motor.v1.MotorService/IsPowered: post: summary: Viam Motor Is Powered description: Check whether the motor is currently powered. operationId: motorIsPowered tags: [Motor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.movementsensor.v1.MovementSensorService/GetPosition: post: summary: Viam Movement Sensor Get Position description: Get GPS position (latitude, longitude, altitude). operationId: movementSensorGetPosition tags: [Movement Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.movementsensor.v1.MovementSensorService/GetLinearVelocity: post: summary: Viam Movement Sensor Get Linear Velocity description: Get linear velocity in m/s. operationId: movementSensorGetLinearVelocity tags: [Movement Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.movementsensor.v1.MovementSensorService/GetAngularVelocity: post: summary: Viam Movement Sensor Get Angular Velocity description: Get angular velocity in deg/s. operationId: movementSensorGetAngularVelocity tags: [Movement Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.movementsensor.v1.MovementSensorService/GetCompassHeading: post: summary: Viam Movement Sensor Get Compass Heading description: Get compass heading in degrees. operationId: movementSensorGetCompassHeading tags: [Movement Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.movementsensor.v1.MovementSensorService/GetOrientation: post: summary: Viam Movement Sensor Get Orientation description: Get orientation as an orientation vector. operationId: movementSensorGetOrientation tags: [Movement Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.powersensor.v1.PowerSensorService/GetVoltage: post: summary: Viam Power Sensor Get Voltage description: Read voltage in volts. operationId: powerSensorGetVoltage tags: [Power Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.powersensor.v1.PowerSensorService/GetCurrent: post: summary: Viam Power Sensor Get Current description: Read current in amperes. operationId: powerSensorGetCurrent tags: [Power Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.powersensor.v1.PowerSensorService/GetPower: post: summary: Viam Power Sensor Get Power description: Read power in watts. operationId: powerSensorGetPower tags: [Power Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.sensor.v1.SensorService/GetReadings: post: summary: Viam Sensor Get Readings description: Get the latest readings from a generic sensor. operationId: sensorGetReadings tags: [Sensor] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.servo.v1.ServoService/Move: post: summary: Viam Servo Move description: Move the servo to an angle in degrees. operationId: servoMove tags: [Servo] requestBody: required: true content: application/json: schema: type: object required: [name, angle_deg] properties: { name: { type: string }, angle_deg: { type: integer } } responses: { '200': { description: Successful response. } } /viam.component.servo.v1.ServoService/GetPosition: post: summary: Viam Servo Get Position description: Get the servo's current position. operationId: servoGetPosition tags: [Servo] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.switch.v1.SwitchService/SetPosition: post: summary: Viam Switch Set Position description: Set the switch's position. operationId: switchSetPosition tags: [Switch] requestBody: required: true content: application/json: schema: type: object required: [name, position] properties: { name: { type: string }, position: { type: integer } } responses: { '200': { description: Successful response. } } /viam.component.switch.v1.SwitchService/GetPosition: post: summary: Viam Switch Get Position description: Get the switch's current position. operationId: switchGetPosition tags: [Switch] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.audioin.v1.AudioInService/GetAudio: post: summary: Viam Audio In Get Audio description: Capture audio from an input device. operationId: audioInGetAudio tags: [Audio In] requestBody: required: true content: application/json: schema: { type: object, required: [name], properties: { name: { type: string } } } responses: { '200': { description: Successful response. } } /viam.component.audioout.v1.AudioOutService/Play: post: summary: Viam Audio Out Play description: Play an audio payload on an output device. operationId: audioOutPlay tags: [Audio Out] requestBody: required: true content: application/json: schema: type: object required: [name, audio] properties: { name: { type: string }, audio: { type: string, format: byte } } responses: { '200': { description: Successful response. } } /viam.component.generic.v1.GenericService/DoCommand: post: summary: Viam Generic Do Command description: Send a custom model-specific command to a generic component. operationId: genericDoCommand tags: [Generic] requestBody: required: true content: application/json: schema: type: object required: [name, command] properties: { name: { type: string }, command: { type: object } } responses: { '200': { description: Successful response. } } components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: key description: Viam API key or location secret.