> ## Documentation index
> Fetch the complete documentation index at: https://developer.rhombus.com/llms.txt
> Use it to discover all available pages before exploring further.

# Update PTZ patrol

> Set the patrol points of a first-party mechanical PTZ camera, or turn its patrol on or off. The camera picks the change up from its config.

```http
POST https://api2.rhombussystems.com/api/camera/updatePtzPatrol
```

EU organizations send the same request to `https://api2.eu.rhombussystems.com`.

## Authentication and parameters

- `x-auth-apikey` (header, required): Your Rhombus API key. Must be accompanied by the `x-auth-scheme` header set to `api-token` (or `partner-api-token` for partner endpoints).
- `Authorization` (header): instead of an API key, an OAuth access token (`Bearer <token>`) with the `write` scope.
- `x-auth-scheme` (header, string, default: `api-token`): Authentication scheme identifier. Use `api-token` or `partner-api-token` with the `x-auth-apikey` header, `api` or `partner-api` with `x-auth-apikey` plus a client certificate, `api-oauth-token` or `partner-api-oauth-token` with `x-auth-access-token`, and `federated-token` with `x-auth-ft`. A request with `Authorization: Bearer <token>` and no `x-auth-scheme` is treated as OAuth, and `federated-token` may also be sent as the `x-auth-scheme` and `x-auth-ft` query parameters. One of: `api-token`, `api`, `api-oauth-token`, `federated-token`, `partner-api-token`, `partner-api`, `partner-api-oauth-token`.
- `x-auth-org` (header, string<RUUID>): Client organization UUID (22-character RUUID), for partner credentials only. With it the call runs in that client organization with the partner support authority's role. Without it a partner credential runs as the partner organization, which outside the partner endpoints is deprecated (responses carry `Deprecation` and `Sunset: Tue, 05 Jan 2027 00:00:00 GMT`). A malformed value returns 400 `INVALID_AUTH_ORG`; a client organization the partner cannot access returns 403 `PARTNER_CLIENT_ACCESS_DENIED`.

## Request body

Content type: `application/json`. Update a mechanical PTZ (R650) camera's patrol. A field left out keeps its stored value, so the points and the on/off switch can be changed separately.

- `cameraUuid` (string<DeviceFacetUuid> | null): RUUID with optional appended facet information
- `enabled` (boolean | null): Turn the patrol on or off; leave out to keep the stored value
- `points` (array<object> | null): The full point list in visiting order, at most 32, replacing the stored list; leave out to keep the stored points. Changing the list restarts the patrol at the first point.

## Response 200

OK. Content type: `application/json`

- `error` (boolean | null)
- `errorCode` (string | null): Stable, machine-readable code for the failure (one of the ApiErrorCode catalog) when error is true. Branch on this, not on errorMsg.
- `errorMsg` (string | null)
- `patrol` (object): A mechanical PTZ (R650) patrol. While enabled, the camera visits the points in order, stays at each for its dwell, and wraps back to the first. Any user move pauses the patrol for 30 seconds.
- `warningMsg` (string | null)

## Errors

Also 400, 401, 403, 429, 500, 503 with the standard error body (`errorCode`, `errorMsg`): https://developer.rhombus.com/errors

## OpenAPI

````yaml
openapi: 3.0.1
info:
  title: Rhombus API
  version: "1.0"
servers:
  - description: Production Server
    url: https://api2.rhombussystems.com
security:
  - ApiKeyAuth: []
paths:
  /api/camera/updatePtzPatrol:
    post:
      description: Set the patrol points of a first-party mechanical PTZ camera, or turn its patrol on or off. The camera picks the change up from its config.
      operationId: updateCameraPtzPatrol
      parameters:
        - description: "Authentication scheme identifier. Use `api-token` or `partner-api-token` with the `x-auth-apikey` header, `api` or `partner-api` with `x-auth-apikey` plus a client certificate, `api-oauth-token` or `partner-api-oauth-token` with `x-auth-access-token`, and `federated-token` with `x-auth-ft`. A request with `Authorization: Bearer <token>` and no `x-auth-scheme` is treated as OAuth, and `federated-token` may also be sent as the `x-auth-scheme` and `x-auth-ft` query parameters."
          example: api-token
          in: header
          name: x-auth-scheme
          required: false
          schema:
            default: api-token
            enum:
              - api-token
              - api
              - api-oauth-token
              - federated-token
              - partner-api-token
              - partner-api
              - partner-api-oauth-token
            type: string
        - description: "Client organization UUID (22-character RUUID), for partner credentials only. With it the call runs in that client organization with the partner support authority's role. Without it a partner credential runs as the partner organization, which outside the partner endpoints is deprecated (responses carry `Deprecation` and `Sunset: Tue, 05 Jan 2027 00:00:00 GMT`). A malformed value returns 400 `INVALID_AUTH_ORG`; a client organization the partner cannot access returns 403 `PARTNER_CLIENT_ACCESS_DENIED`."
          in: header
          name: x-auth-org
          required: false
          schema:
            format: RUUID
            maxLength: 22
            minLength: 22
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Camera_UpdateCameraPtzPatrolWSRequest"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Camera_UpdateCameraPtzPatrolWSResponse"
          description: OK
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
      security:
        - ApiKeyAuth: []
        - oauth2:
            - write
      summary: Update PTZ patrol
      tags:
        - Camera Webservice
components:
  schemas:
    Camera_UpdateCameraPtzPatrolWSRequest:
      description: Update a mechanical PTZ (R650) camera's patrol. A field left out keeps its stored value, so the points and the on/off switch can be changed separately.
      properties:
        cameraUuid:
          description: RUUID with optional appended facet information
          example: AAAAAAAAAAAAAAAAAAAAAA.v0
          format: DeviceFacetUuid
          nullable: true
          type: string
        enabled:
          description: Turn the patrol on or off; leave out to keep the stored value
          nullable: true
          type: boolean
        points:
          description: The full point list in visiting order, at most 32, replacing the stored list; leave out to keep the stored points. Changing the list restarts the patrol at the first point.
          items:
            $ref: "#/components/schemas/Camera_CameraPtzPatrolPointType"
          nullable: true
          type: array
      type: object
    Camera_CameraPtzPatrolPointType:
      description: "One stop of a mechanical PTZ (R650) patrol: a position, captured from the camera's live position, and how long to stay there."
      properties:
        dwellSecs:
          description: Seconds to stay at this point once the camera arrives, [1, 86400]. Defaults to 15 when left out of an update.
          example: 15
          format: int32
          nullable: true
          type: integer
        name:
          description: Label shown in the console, e.g. "Gate entrance". Optional, at most 64 characters; surrounding whitespace is trimmed and a blank name is stored as none.
          example: Gate entrance
          nullable: true
          type: string
        panDegrees:
          description: Horizontal rotation in degrees, [0, 360)
          example: 90.5
          format: float
          nullable: true
          type: number
        tiltDegrees:
          description: Vertical rotation in degrees, [-20, 200]
          example: 10
          format: float
          nullable: true
          type: number
        zoom:
          description: Zoom motor step, 0 or more
          example: 400
          format: int32
          nullable: true
          type: integer
      type: object
    Camera_UpdateCameraPtzPatrolWSResponse:
      description: The patrol as stored after the update, with default dwells filled in.
      properties:
        error:
          nullable: true
          type: boolean
        errorCode:
          description: Stable, machine-readable code for the failure (one of the ApiErrorCode catalog) when error is true. Branch on this, not on errorMsg.
          nullable: true
          type: string
        errorMsg:
          nullable: true
          type: string
        patrol:
          $ref: "#/components/schemas/Camera_CameraPtzPatrolType"
        warningMsg:
          nullable: true
          type: string
      type: object
    Camera_CameraPtzPatrolType:
      description: A mechanical PTZ (R650) patrol. While enabled, the camera visits the points in order, stays at each for its dwell, and wraps back to the first. Any user move pauses the patrol for 30 seconds.
      properties:
        enabled:
          description: Whether the camera is patrolling
          nullable: true
          type: boolean
        points:
          description: The patrol points in visiting order, at most 32
          items:
            $ref: "#/components/schemas/Camera_CameraPtzPatrolPointType"
          nullable: true
          type: array
      type: object
  securitySchemes:
    ApiKeyAuth:
      description: Your Rhombus API key. Must be accompanied by the `x-auth-scheme` header set to `api-token` (or `partner-api-token` for partner endpoints).
      in: header
      name: x-auth-apikey
      type: apiKey
    oauth2:
      description: 'OAuth 2.0 authorization code flow with PKCE (`S256`). Send the access token as `Authorization: Bearer <token>`. Each operation lists the scopes it requires; a token without them is refused 403 with `WWW-Authenticate: Bearer error="insufficient_scope"`.'
      flows:
        authorizationCode:
          authorizationUrl: https://console.rhombus.com/oauth/authorize
          refreshUrl: https://auth-web.rhombussystems.com/oauth/token
          scopes:
            physical: Unlock doors and elevators, lockdown, alarms, speakers and robots
            read: View cameras, footage and settings
            write: Change settings and data
          tokenUrl: https://auth-web.rhombussystems.com/oauth/token
      type: oauth2
````
