---
title: "Register cameras"
method: POST
path: "/v1/cameras"
tags: ["cameras"]
---

# Register cameras

`POST /v1/cameras`

Register multiple cameras in single location.

Register one or more cameras at a location by assigning them to available NVRs.
Cameras are automatically load-balanced across NVRs based on available capacity.

## Request body

- RegisterCameraRequest — Request model for bulk camera registration.
  - `cameras` RegisterCameraPayload[], required — List of cameras to register
    - `mac_address` string — Camera MAC address. If omitted, a synthetic unique identifier is generated server-side.
    - `name` string, required — Camera display name
    - `ip` string, required — Camera IP address
    - `vendor` string — Camera manufacturer. Defaults to 'Unknown' when not provided.
    - `rtsp_port` integer — RTSP port number
    - `rtsp_url_path` string — Path component of the RTSP URL (e.g. '/Streaming/Channels/101'). Combined with ip, rtsp_port and credentials at runtime to form the full URL. Defaults to '/unknown' to match the placeholder used elsewhere in the system; callers should set this when the actual path is known.
    - `credentials` Credentials — Authentication credentials for camera access.
      - `username` string, required — Camera login username
      - `password` string, required — Camera login password
    - `nvrs` string[], required — List of NVR display names from which the camera will be assigned to one. The system selects an available NVR from this list during registration.
  - `location_id` integer, required — Location ID to assign cameras to

## Response `200`

Successful Response

- RegisterCameraResponse — Success response model for camera registration.
  - `status` 'success'
  - `summary` Summary, required — Summary of operation.
    - `total` integer, required — Total number of operations in request
    - `success_count` integer, required — Number of successful operations
    - `failure_count` integer, required — Number of failed operations
  - `results` union[] — List of camera registration results
    - union
      - RegisterCameraSuccessResult — Success result for camera registration.
        - `status` 'success'
        - `data` RegisterCameraSuccessData, required — Data returned for a successfully registered camera.
          - `mac_address` string, required — Camera MAC address
          - `nvr` CameraNVRInfo, required — NVR (Network Video Recorder) associated with the camera.
            - `name` string, required — NVR display name
            - `timezone` string — NVR timezone (IANA format, e.g., 'America/New_York')
      - RegisterCameraErrorResult — Error result for camera registration.
        - `status` 'error'
        - `error` ErrorDetails, required — Error message
          - `code` 'VALIDATION_ERROR' | 'BATCH_SIZE_EXCEEDED' | 'NO_CAMERAS_PROVIDED' | 'PARTIAL_OPERATIONS_NOT_SUPPORTED' | 'CAMERA_ALREADY_EXISTS' | 'CAMERA_NOT_FOUND' | 'NO_LICENSES_AVAILABLE' | 'INVALID_MAC_ADDRESS' | 'INVALID_IP_ADDRESS' | 'DUPLICATE_MAC_ADDRESSES' | 'NVR_CAPACITY_EXCEEDED' | 'NVR_NOT_FOUND' | 'INVALID_NVR_NAME' | 'LOCATION_NOT_FOUND' | 'NVR_REGISTRATION_FAILED' | 'NVR_ALREADY_REGISTERED' | 'PING_REQUEST_TIMEOUT' | 'PING_REQUEST_FAILED' | 'SPEEDTEST_REQUEST_TIMEOUT' | 'SPEEDTEST_REQUEST_FAILED' | 'NO_NVRS_PROVIDED' | 'DUPLICATE_NVR_NAMES' | 'LOCATION_ACCESS_DENIED' | 'LOCATION_NAME_ALREADY_EXISTS' | 'LOCATION_CREATION_FAILED' | 'NO_LOCATIONS_PROVIDED' | 'DUPLICATE_LOCATION_NAMES' | 'ALERT_EVENT_NOT_FOUND' | 'ALERT_NO_VIDEO_AVAILABLE' | 'ALERT_CAMERA_NOT_FOUND' | 'ALERT_CLIP_GENERATION_FAILED' | 'ALERT_NOT_FIREARM' | 'FIREARM_ALERT_NOT_FOUND' | 'INVALID_RECIPIENT_EMAILS' | 'PREMIUM_ALERT_CAMERA_LIMIT_EXCEEDED' | 'CAMERA_ALREADY_IN_USE' | 'ACCESS_EVENT_NOT_FOUND' | 'ACCESS_EVENT_NO_VIDEO_AVAILABLE' | 'ACCESS_EVENT_CLIP_GENERATION_FAILED' | 'CAMERA_GROUP_NOT_FOUND' | 'CAMERA_GROUP_NAME_ALREADY_EXISTS' | 'CAMERA_GROUP_CREATION_FAILED' | 'NO_GROUPS_PROVIDED' | 'DUPLICATE_GROUP_NAMES' | 'INVALID_GROUP_ID' | 'DUPLICATE_GROUP_IDS', required — Centralized error codes for Developer API endpoints.
          - `message` string, required — Error message
          - `field` string — Error field
          - `docs` string — Error docs

## Other responses

- `422` — Validation error

---

[API](https://skmtc.net/coram/apis/coram-api.md) · [All operations](https://skmtc.net/coram/apis/coram-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/coram/coram-api/versions/c956b1fde14a/schema)
