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

# Splice V3

> Send a request to create an arbitrary clip for multiple cameras

```http
POST https://api2.rhombussystems.com/api/video/spliceV3
```

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`. Request object for splicing video clips V3 with multiple cameras and advanced options.

- `accessSettings` (object): Visibility setting for the clip
- `alteredViewMap` (map<string, array<object> | null> | null): Map of device facet UUIDs to altered view configurations
- `audioIncluded` (boolean | null): Whether to include audio in the clip
- `clipVisibility` (string): Use accessSettings instead One of: `PRIVATE`, `ROLE_RESTRICTED`, `ORG_WIDE`.
- `description` (string | null): Description for the spliced clip
- `deviceIntervalMap` (map<string, array<object> | null> | null): Optional map of device facet UUIDs to a list of time intervals (start/end millis) for multi-interval splicing. When provided and non-empty, the request is treated as multi-interval and the top-level startTimeMillis/durationSec are ignored. The sum of all interval durations across all devices is capped at 60 minutes, and each interval must be at least 1 second long.
- `deviceUuids` (array<string<DeviceFacetUuid> | null> | null): List of device facet UUIDs to splice video from
- `durationSec` (integer<int32> | null): Duration in seconds for the splice
- `integrationUploadMap` (map<string, boolean | null> | null): Map of integration names to upload flags
- `saveToConsole` (boolean | null): Whether to save the clip to console
- `sendToSharedStorage` (boolean | null): Whether to send to shared storage
- `sendToUserStorage` (boolean | null): Whether to send to user storage
- `startTimeMillis` (integer<int64> | null): Start time in milliseconds for the splice
- `title` (string | null): Title for the spliced clip

## Response 200

OK. Content type: `application/json`

- `clipUuid` (string<RUUID> | null): base 64 (url-safe) uuid string
- `clipUuidList` (array<string<RUUID> | null> | null): List of UUIDs for created spliced clips
- `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)
- `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/video/spliceV3:
    post:
      description: Send a request to create an arbitrary clip for multiple cameras
      operationId: spliceV3
      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/Video_SpliceV3WSRequest"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Video_SpliceV3WSResponse"
          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: Splice V3
      tags:
        - Video Webservice
components:
  schemas:
    Video_SpliceV3WSRequest:
      description: Request object for splicing video clips V3 with multiple cameras and advanced options.
      properties:
        accessSettings:
          $ref: "#/components/schemas/ClipAccessSettings"
        alteredViewMap:
          additionalProperties:
            description: Map of device facet UUIDs to altered view configurations
            items:
              $ref: "#/components/schemas/AlteredView"
            nullable: true
            type: array
          description: Map of device facet UUIDs to altered view configurations
          nullable: true
          type: object
        audioIncluded:
          description: Whether to include audio in the clip
          example: true
          nullable: true
          type: boolean
        clipVisibility:
          $ref: "#/components/schemas/ClipVisibilityEnum"
        description:
          description: Description for the spliced clip
          example: Review of security incident from main entrance
          nullable: true
          type: string
        deviceIntervalMap:
          additionalProperties:
            description: Optional map of device facet UUIDs to a list of time intervals (start/end millis) for multi-interval splicing. When provided and non-empty, the request is treated as multi-interval and the top-level startTimeMillis/durationSec are ignored. The sum of all interval durations across all devices is capped at 60 minutes, and each interval must be at least 1 second long.
            items:
              $ref: "#/components/schemas/TimeInterval"
            nullable: true
            type: array
          description: Optional map of device facet UUIDs to a list of time intervals (start/end millis) for multi-interval splicing. When provided and non-empty, the request is treated as multi-interval and the top-level startTimeMillis/durationSec are ignored. The sum of all interval durations across all devices is capped at 60 minutes, and each interval must be at least 1 second long.
          nullable: true
          type: object
        deviceUuids:
          description: List of device facet UUIDs to splice video from
          items:
            description: RUUID with optional appended facet information
            example: AAAAAAAAAAAAAAAAAAAAAA.v0
            format: DeviceFacetUuid
            nullable: true
            type: string
          nullable: true
          type: array
        durationSec:
          description: Duration in seconds for the splice
          example: 60
          format: int32
          nullable: true
          type: integer
        integrationUploadMap:
          additionalProperties:
            description: Map of integration names to upload flags
            nullable: true
            type: boolean
          description: Map of integration names to upload flags
          nullable: true
          type: object
        saveToConsole:
          description: Whether to save the clip to console
          example: true
          nullable: true
          type: boolean
        sendToSharedStorage:
          description: Whether to send to shared storage
          example: false
          nullable: true
          type: boolean
        sendToUserStorage:
          description: Whether to send to user storage
          example: false
          nullable: true
          type: boolean
        startTimeMillis:
          description: Start time in milliseconds for the splice
          example: 1640995200000
          format: int64
          nullable: true
          type: integer
        title:
          description: Title for the spliced clip
          example: Security Incident Review
          nullable: true
          type: string
      type: object
    ClipAccessSettings:
      description: Visibility setting for the clip
      properties:
        allowedRoles:
          items:
            description: base 64 (url-safe) uuid string
            example: AAAAAAAAAAAAAAAAAAAAAA
            format: RUUID
            nullable: true
            type: string
          nullable: true
          type: array
          uniqueItems: true
        allowedUsers:
          items:
            description: base 64 (url-safe) uuid string
            example: AAAAAAAAAAAAAAAAAAAAAA
            format: RUUID
            nullable: true
            type: string
          nullable: true
          type: array
          uniqueItems: true
        visibility:
          $ref: "#/components/schemas/ClipVisibilityEnum"
      type: object
    ClipVisibilityEnum:
      description: Use accessSettings instead
      enum:
        - PRIVATE
        - ROLE_RESTRICTED
        - ORG_WIDE
      type: string
    AlteredView:
      description: Map of device facet UUIDs to altered view configurations
      properties:
        crop:
          $ref: "#/components/schemas/CroppedPermyriadRect"
        dewarp:
          $ref: "#/components/schemas/DewarpedView"
      type: object
    CroppedPermyriadRect:
      properties:
        height:
          format: int32
          nullable: true
          type: integer
        width:
          format: int32
          nullable: true
          type: integer
        x:
          format: int32
          nullable: true
          type: integer
        y:
          format: int32
          nullable: true
          type: integer
      type: object
    DewarpedView:
      properties:
        aspectRatio:
          $ref: "#/components/schemas/AspectRatio"
        pitchDegrees:
          format: float
          nullable: true
          type: number
        rollDegrees:
          format: float
          nullable: true
          type: number
        verticalFieldOfViewDegrees:
          format: int32
          nullable: true
          type: integer
        yawDegrees:
          format: float
          nullable: true
          type: number
      type: object
    AspectRatio:
      properties:
        height:
          format: int32
          nullable: true
          type: integer
        width:
          format: int32
          nullable: true
          type: integer
      type: object
    TimeInterval:
      properties:
        endMs:
          format: int64
          nullable: true
          type: integer
        startMs:
          format: int64
          nullable: true
          type: integer
      type: object
    Video_SpliceV3WSResponse:
      description: Response object for splicing video clips V3.
      properties:
        clipUuid:
          description: base 64 (url-safe) uuid string
          example: AAAAAAAAAAAAAAAAAAAAAA
          format: RUUID
          nullable: true
          type: string
        clipUuidList:
          description: List of UUIDs for created spliced clips
          items:
            description: base 64 (url-safe) uuid string
            example: AAAAAAAAAAAAAAAAAAAAAA
            format: RUUID
            nullable: true
            type: string
          nullable: true
          type: array
        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
        warningMsg:
          nullable: true
          type: string
      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
````
