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

# Get exact frame data

> Fetches and returns the bytes, base64 encoded, of the frame at the given timestamp for a device. Use this instead of getExactFrameUri if, for whatever reason, either the URI is not useful or the client is unable to hit the media servers. The response always has HTTP status 200; check the status field, frameData is only set when it is AVAILABLE.

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

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 `read` 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 fetching the bytes of an exact frame from a camera.

- `cameraUuid` (string<DeviceFacetUuid> | null, required): RUUID with optional appended facet information
- `downscaleFactor` (integer<int32> | null): Ratio to shrink the image pixels by. Defaults to 1 (full resolution).
- `permyriadCropHeight` (integer<int32> | null): Precise ratio to crop the height by. Capped at 10000, which is 100.00% of the image
- `permyriadCropWidth` (integer<int32> | null): Precise ratio to crop the width by. Capped at 10000, which is 100.00% of the image
- `permyriadCropX` (integer<int32> | null): Proportional location to start horizontal crop at. Where 10000 is 100.00% of, or the end of the image
- `permyriadCropY` (integer<int32> | null): Proportional location to start vertical crop at. Where 10000 is 100.00% of, or the end of the image
- `timestampMs` (integer<int64> | null, required): Timestamp in epoch milliseconds

## 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)
- `frameData` (string | null): Base64-encoded image bytes for the requested frame. Null if no frame could be retrieved.
- `mimeType` (string | null): MIME type of the encoded frame data
- `responseMessage` (string | null): Human-readable message describing the result
- `status` (string): Outcome of an exact frame request. AVAILABLE is the only value under which a frame URI or frame data is returned; every other value explains why the frame cannot be served. One of: `AVAILABLE`, `FUTURE_TIMESTAMP`, `CAMERA_DELETED`, `CAMERA_STATE_UNAVAILABLE`, `CAMERA_NOT_CONNECTED`, `MEDIA_STORAGE_DEVICE_NOT_CONNECTED`, `NOT_RECORDING_AT_TIMESTAMP`, `NO_FOOTAGE_AT_TIMESTAMP`, `MEDIA_ADDRESS_UNAVAILABLE`, `FRAME_RETRIEVAL_FAILED`.
- `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/getExactFrameData:
    post:
      description: Fetches and returns the bytes, base64 encoded, of the frame at the given timestamp for a device. Use this instead of getExactFrameUri if, for whatever reason, either the URI is not useful or the client is unable to hit the media servers. The response always has HTTP status 200; check the status field, frameData is only set when it is AVAILABLE.
      operationId: getExactFrameData
      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_GetExactFrameDataWSRequest"
      responses:
        "200":
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Video_GetExactFrameDataWSResponse"
          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:
            - read
      summary: Get exact frame data
      tags:
        - Video Webservice
components:
  schemas:
    Video_GetExactFrameDataWSRequest:
      description: Request object for fetching the bytes of an exact frame from a camera.
      properties:
        cameraUuid:
          description: RUUID with optional appended facet information
          example: AAAAAAAAAAAAAAAAAAAAAA.v0
          format: DeviceFacetUuid
          nullable: true
          type: string
        downscaleFactor:
          description: Ratio to shrink the image pixels by. Defaults to 1 (full resolution).
          format: int32
          minimum: 1
          nullable: true
          type: integer
        permyriadCropHeight:
          description: Precise ratio to crop the height by. Capped at 10000, which is 100.00% of the image
          format: int32
          maximum: 10000
          minimum: 0
          nullable: true
          type: integer
        permyriadCropWidth:
          description: Precise ratio to crop the width by. Capped at 10000, which is 100.00% of the image
          format: int32
          maximum: 10000
          minimum: 0
          nullable: true
          type: integer
        permyriadCropX:
          description: Proportional location to start horizontal crop at. Where 10000 is 100.00% of, or the end of the image
          format: int32
          maximum: 10000
          minimum: 0
          nullable: true
          type: integer
        permyriadCropY:
          description: Proportional location to start vertical crop at. Where 10000 is 100.00% of, or the end of the image
          format: int32
          maximum: 10000
          minimum: 0
          nullable: true
          type: integer
        timestampMs:
          description: Timestamp in epoch milliseconds
          format: int64
          nullable: true
          type: integer
      required:
        - cameraUuid
        - timestampMs
      type: object
    Video_GetExactFrameDataWSResponse:
      description: Response object containing the bytes of the requested frame data in base64 format
      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
        frameData:
          description: Base64-encoded image bytes for the requested frame. Null if no frame could be retrieved.
          nullable: true
          type: string
        mimeType:
          description: MIME type of the encoded frame data
          example: image/jpeg
          nullable: true
          type: string
        responseMessage:
          description: Human-readable message describing the result
          example: Frame retrieved successfully
          nullable: true
          type: string
        status:
          $ref: "#/components/schemas/Video_ExactFrameAvailabilityWSStatus"
        warningMsg:
          nullable: true
          type: string
      type: object
    Video_ExactFrameAvailabilityWSStatus:
      description: Outcome of an exact frame request. AVAILABLE is the only value under which a frame URI or frame data is returned; every other value explains why the frame cannot be served.
      enum:
        - AVAILABLE
        - FUTURE_TIMESTAMP
        - CAMERA_DELETED
        - CAMERA_STATE_UNAVAILABLE
        - CAMERA_NOT_CONNECTED
        - MEDIA_STORAGE_DEVICE_NOT_CONNECTED
        - NOT_RECORDING_AT_TIMESTAMP
        - NO_FOOTAGE_AT_TIMESTAMP
        - MEDIA_ADDRESS_UNAVAILABLE
        - FRAME_RETRIEVAL_FAILED
      type: string
  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
````
