openapi: 3.2.0 info: title: GROUPING Layouts API version: 3.0.0 description: All core operations on one layouts, which are used to show multiple feeds at the same time. servers: - url: https://{BaseUrl}/api/v3.0 description: Eagle Eye Networks API Server variables: BaseUrl: default: api.cxxx.eagleeyenetworks.com description: HTTPS Base url to use for all API calls, retrieved from https://api.eagleeyenetworks.com/api/v3.0/clientSettings security: - bearerAuth: [] tags: - name: Layouts description: All core operations on one layouts, which are used to show multiple feeds at the same time. paths: /layouts: get: operationId: getLayouts description: 'This endpoint allows you to retrieve all the layouts associated with the account. It is important to note that after using the pageSize parameter, the "totalSize" in the response represents the total number of available layouts, not the number of layouts resulting from the query string.' parameters: - $ref: '#/components/parameters/includeForList' - $ref: '#/components/parameters/sort' - $ref: '#/components/parameters/pageToken' - $ref: '#/components/parameters/pageSize' - $ref: '#/components/parameters/name' - $ref: '#/components/parameters/name__in' - $ref: '#/components/parameters/name__contains' - $ref: '#/components/parameters/id__in' - $ref: '#/components/parameters/bridge' - $ref: '#/components/parameters/q' - $ref: '#/components/parameters/qRelevance__gte' responses: '200': description: Successfully fetched content: application/json: schema: $ref: '#/components/schemas/ApiPaginatedLayoutResponse' '400': $ref: '#/components/responses/validationError' '401': $ref: '#/components/responses/unauthorized' '500': $ref: '#/components/responses/internalServerError' tags: - Layouts summary: Get layouts x-summary-source: derived post: description: This endpoint allows you to create a layout. operationId: createLayout requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiLayoutCreate' responses: '201': description: Layout Created content: application/json: schema: $ref: '#/components/schemas/ApiLayoutForSingle' '400': $ref: '#/components/responses/validationError' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '500': $ref: '#/components/responses/internalServerError' tags: - Layouts summary: Create layout x-summary-source: derived /layouts/{layoutId}: parameters: - $ref: '#/components/parameters/layoutId' delete: operationId: deleteLayout description: This endpoint allows you to delete an existing layout. responses: '204': description: Layout deleted. '400': $ref: '#/components/responses/validationError' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '404': $ref: '#/components/responses/resourceNotFound' '500': $ref: '#/components/responses/internalServerError' tags: - Layouts summary: Delete layout x-summary-source: derived get: operationId: getLayout description: This endpoint allows you to retrieve info of a specific layout. tags: - Layouts parameters: - $ref: '#/components/parameters/includeForSingle' responses: '200': description: Successfully fetched content: application/json: schema: $ref: '#/components/schemas/ApiLayoutForSingle' '400': $ref: '#/components/responses/validationError' '401': $ref: '#/components/responses/unauthorized' '404': $ref: '#/components/responses/resourceNotFound' '500': $ref: '#/components/responses/internalServerError' summary: Get layout x-summary-source: derived patch: description: This endpoint allows you to update a specific layout. operationId: updateLayout requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ApiLayoutUpdate' responses: '204': description: Layout Updated '400': $ref: '#/components/responses/validationError' '401': $ref: '#/components/responses/unauthorized' '403': $ref: '#/components/responses/forbidden' '404': $ref: '#/components/responses/resourceNotFound' '500': $ref: '#/components/responses/internalServerError' tags: - Layouts summary: Update layout x-summary-source: derived components: schemas: ApiPaginatedLayoutResponse: allOf: - $ref: '#/components/schemas/PaginatedResponseWithSize' - type: object properties: results: type: array items: $ref: '#/components/schemas/ApiLayoutForList' ErrorInfoExceptionDetail: properties: type: description: A string enum describing the type of detail object. type: string enum: - errorInfo reason: description: 'The reason for the error. This is a constant value that identifies the proximate cause of the error. Error reasons are unique within a particular domain of errors. ' type: string enum: - unauthenticated - unexpectedArgument - missingRequiredArgument - wrongArgumentValue - invalidPermission - wrongEdition - wrongAccountType - resourceNotFound - endpointNotFound - methodNotSupported - unexpectedError - acceptNotSupported - alreadyExists - foreignKeyConflict - childDevicesExist - contentNotSupported - deadlineExpired - tooManyRequests - deviceUnavailable - serviceUnavailable - invalidJSON - resourceLocked - notSupportedOnBridge - outOfRetention - deviceIdentificationFailed - credentialValidationFailed - credentialSetupFailed - localUrlValidationFailed - hwRegistrationFailed - failedAddingCameraAfterValidation - neverConnected - reconnectFailed - unsupportedModel - purged - userBlocked - userTemporarilyBlocked - quotaExceeded - alreadyValidated - reAuthenticationRequired - badGateway domain: description: 'Logical grouping to which the "reason" belongs ' type: string metadata: $ref: '#/components/schemas/ExceptionMetadata' ApiPaneGet: allOf: - $ref: '#/components/schemas/ApiPane' required: - id - name - type - size - cameraId - compositeId EdgeReportedDeviceStatusCounts: type: object properties: operational: type: integer disabled: type: integer unreachable: type: integer error: type: integer unknown: type: integer initializing: type: integer CameraStatusCounts: type: object properties: online: type: integer deviceOffline: type: integer 'off': type: integer bridgeOffline: type: integer invalidCredentials: type: integer error: type: integer unknown: type: integer ExceptionDetail: type: object oneOf: - $ref: '#/components/schemas/ErrorInfoExceptionDetail' - $ref: '#/components/schemas/BadRequestExceptionDetail' - $ref: '#/components/schemas/ResourceInfoExceptionDetail' discriminator: propertyName: type mapping: errorInfo: '#/components/schemas/ErrorInfoExceptionDetail' badRequest: '#/components/schemas/BadRequestExceptionDetail' resourceInfo: '#/components/schemas/ResourceInfoExceptionDetail' properties: type: description: A string enum describing the type of detail object. type: string enum: - errorInfo - badRequest - resourceInfo required: - type ApiLayoutForSingle: allOf: - $ref: '#/components/schemas/ApiLayoutCreate' properties: id: type: string example: 123ab123-1233-11a1-ab01-1b123ab1234 description: Unique layout identifier accountId: type: string description: Account ID specified in as an ESN Type. pattern: ^[a-fA-F0-9]{8}$ example: '00001106' effectivePermissions: $ref: '#/components/schemas/EffectiveLayoutPermissions' resourceCounts: $ref: '#/components/schemas/ResourceCounts' resourceStatusCounts: $ref: '#/components/schemas/ResourceStatusCounts' resourceStatusV2Counts: $ref: '#/components/schemas/ResourceStatusV2Counts' panes: type: array items: $ref: '#/components/schemas/ApiPaneGet' required: - id - panes - accountId ApiLayoutUpdate: properties: panes: type: array items: $ref: '#/components/schemas/ApiPane' settings: $ref: '#/components/schemas/ApiLayoutSettingsUpdate' name: type: string description: Name of the layout. example: Main office floor 1 minLength: 1 maxLength: 126 CameraStatusV2Counts: type: object properties: cloudConnectionStatus: $ref: '#/components/schemas/CloudConnectionStatusCounts' edgeReportedDeviceStatus: $ref: '#/components/schemas/EdgeReportedDeviceStatusCounts' ApiLayoutForList: allOf: - $ref: '#/components/schemas/ApiLayoutCreate' properties: id: type: string example: 123ab123-1233-11a1-ab01-1b123ab1234 description: Unique layout identifier accountId: type: string description: Account ID specified in as an ESN Type. pattern: ^[a-fA-F0-9]{8}$ example: '00001106' effectivePermissions: $ref: '#/components/schemas/EffectiveLayoutPermissions' resourceCounts: $ref: '#/components/schemas/ResourceCounts' resourceStatusCounts: $ref: '#/components/schemas/ResourceStatusCounts' resourceStatusV2Counts: $ref: '#/components/schemas/ResourceStatusV2Counts' panes: type: array items: $ref: '#/components/schemas/ApiPaneGet' qRelevance: type: number description: 'Field is only returned when `q` parameter is used and its value indicates the relevance of the layout in relation to the terms in the `q` parameter. The range of this value is between 0 and 1, higher is better. ' format: float minimum: 0 maximum: 1 example: 0.5 readOnly: true required: - id - panes - accountId ResourceStatusV2Counts: description: Count of resources by cloud connection status and edge-reported device status. type: object readOnly: true x-jsoninclude-nonnull-annotation: true properties: cameras: $ref: '#/components/schemas/CameraStatusV2Counts' ApiLayoutSettingsUpdate: description: Object identifying the layout settings properties: showCameraBorder: type: boolean example: true description: This flag if enabled, shows pane borders. showCameraName: type: boolean example: true description: This flag if enabled, shows camera name cameraAspectRatio: type: string description: Aspect ratio of image example: 16x9 enum: - 16x9 - 4x3 paneColumns: type: integer minimum: 1 maximum: 6 description: Max number of cameras to show per row ApiV3Error: type: object properties: code: description: HTTP code defined in EEN Standard Code Values type: integer status: description: A string enum describing the code type: string enum: - cancelled - unknown - invalidArgument - deadlineExceeded - notFound - conflict - permissionDenied - resourceExhausted - failedPrecondition - aborted - outOfRange - unimplemented - internal - unavailable - dataLoss - unauthenticated - mediaTypeNotSupported - acceptNotSupported - methodNotSupported - tooManyRequests - badGateway message: description: Developer friendly human readable error message in English type: string details: description: An array of extensible objects that define error information type: array items: $ref: '#/components/schemas/ExceptionDetail' required: - code - status - message - details BadRequestExceptionDetail: properties: type: description: A string enum describing the type of detail object. type: string enum: - badRequest argumentViolations: type: array items: $ref: '#/components/schemas/ArgumentViolation' PaginatedResponseNoTotalSize: type: object description: 'Used to wrap results for a paginated response, containing information on how to retrieve further pages. ' properties: nextPageToken: type: - string - 'null' readOnly: true description: 'Token to retrieve the next page. The value of this token is passed into the field pageToken. This value can be null if there is no next page. ' prevPageToken: type: - string - 'null' readOnly: true description: 'Token to retrieve the previous page. The value of this token is passed into the field pageToken. This value can be null of there is no previous page. ' results: type: array readOnly: true description: The result set from a collection API call. items: type: object required: - nextPageToken - prevPageToken - results ResourceStatusCounts: description: Count of resources by status. type: object readOnly: true x-jsoninclude-nonnull-annotation: true properties: cameras: $ref: '#/components/schemas/CameraStatusCounts' PaginatedResponseWithSize: description: "Used to wrap results for a paginated response, containing information on how to retrieve further pages and the total number of results. \n" allOf: - $ref: '#/components/schemas/PaginatedResponseNoTotalSize' - properties: totalSize: type: integer readOnly: true description: 'Size of the total result set. ' required: - totalSize ResourceInfoExceptionDetail: properties: type: description: A string enum describing the type of detail object. type: string enum: - resourceInfo resource: description: Referenced resource type, eg "cameras", "bridges", or "locations". type: string ids: type: array description: Identities of resources items: type: string ApiPane: properties: id: type: integer example: 1 description: Unique identifier of pane in layout assigned to each pane. This determines the location indexing of panes in layout. minimum: 0 name: type: string example: front door description: Name of the pane in layout maxLength: 126 type: type: string example: preview enum: - preview - compositePreview description: 'Possible values: * `preview` - show the view for a single camera using "preview" images which are lower resolution and lower frequency than the real stream. * `compositePreview` - show the composite of a de-warped camera view. ' size: type: integer example: 1 description: Size of displayed image in pane. Size 1 shows the smallest size minimum: 1 maximum: 3 cameraId: type: string example: 1003b545 description: Unique identifier of the camera. compositeId: type: - string - 'null' description: Unique identifier of the composite of a de-warped camera view. required: - id - name - type - size - cameraId ArgumentViolation: properties: argumentName: type: string description: Name of the argument description: type: string description: Description of the violation ExceptionMetadata: properties: path: description: Path of the request type: string method: description: Method of the request type: string ApiLayoutCreate: allOf: - $ref: '#/components/schemas/ApiLayoutUpdate' - properties: settings: $ref: '#/components/schemas/ApiLayoutSettings' required: - name - settings CloudConnectionStatusCounts: type: object properties: connected: type: integer disconnected: type: integer ApiLayoutSettings: allOf: - $ref: '#/components/schemas/ApiLayoutSettingsUpdate' - required: - showCameraBorder - showCameraName - cameraAspectRatio - paneColumns ResourceCounts: description: Count of resources. type: object readOnly: true x-jsoninclude-nonnull-annotation: true properties: cameras: type: integer minimum: 0 example: 23 EffectiveLayoutPermissions: readOnly: true type: object x-jsoninclude-nonnull-annotation: true properties: delete: type: boolean read: type: boolean edit: type: boolean parameters: q: in: query name: q description: 'Text search that is applied to multiple fields. The fields being searched are defined by the backend and can be changed without warning. Example fields being searched: `name`, `id`, `accountId`. ' schema: type: string example: entrance layoutId: name: layoutId in: path required: true schema: type: string example: 123ab123-1233-11a1-ab01-1b123ab1234 description: Unique layout identifier name__in: in: query name: name__in description: Filter to get the layouts whose name is on the provided list. The lookup is exact and case insensitive. schema: type: array items: type: string style: form explode: false includeForSingle: in: query name: include style: form explode: false schema: type: array items: type: string enum: - effectivePermissions - resourceCounts - resourceStatusCounts - resourceStatusV2Counts pageSize: in: query name: pageSize description: 'The number of entries to return per page. The maximum range of valid page sizes is documented with minimum and maximum values, but the range might be further limited dynamically based on the requested information, account, and system status. Values outside of the (dynamic) allowed range will not result in an error, but will be clamped to the nearest limit. Thus, logic to detect the last page should not be based on comparing the requested size with the received size, but on the existence of a `nextPageToken` value. ' example: 100 required: false schema: type: integer minimum: 1 maximum: 500 default: 100 sort: in: query name: sort description: "Comma separated list of of fields that should be sorted.\n * `sort=` - not providing any value will result in error 400\n * `sort=+name,+name` - same values will result in error 400\n * `sort=-name,+name` - mutially exclusive values will return error 400\n * maxItem=3 - Only Three values will be accepted, more will return error 400\n * qRelevance is optional ordering parameter which is available if q filter is used, if q filter is not passed qRelevance as ordering parameter will return error 400\n * rotationOrder is ordering elements according to the user's list of Layout ids as configured in the user configuration parameter layoutSettings.rotationOrder. Layouts which are not in the list are ordered based on lower priority ordering params if specified, or by the default ordering if not specified.\n" schema: type: array default: - +name items: type: string maxItems: 3 enum: - -name - -qRelevance - +name - +rotationOrder - +qRelevance example: - +name - -qRelevance style: form explode: false includeForList: in: query name: include style: form explode: false schema: type: array items: type: string enum: - effectivePermissions - resourceCounts - resourceStatusCounts - resourceStatusV2Counts - qRelevance id__in: in: query name: id__in description: Filter to get the layouts whose id is on the provided list. The lookup is exact and case insensitive. schema: type: array items: type: string style: form explode: false name: in: query name: name description: Filter to get the layouts with the specified name. The lookup is exact and case insensitive. schema: type: string name__contains: in: query name: name__contains description: 'Filter to get the layouts whose the name contains the provided substring. The lookup is exact and case insensitive. ' schema: type: string pageToken: in: query name: pageToken description: 'Token string value that references a page for pagination. This value is received when retrieving the first page in the `nextPageToken` and `prevPageToken` fields. When a pageToken is provided, the backend remembers search parameters from the original request, so search parameters that affect the result set or order are optional and will be ignored if provided. Representation parameters like `include` should still be applied. ' example: b2Zmc2V0PTEwJmxpbWl0PTEw required: false schema: type: string bridge: in: query name: layoutPanes.cameras.bridgeId description: 'Filter to get the layouts that contain cameras of given bridge id. ' schema: type: string qRelevance__gte: in: query name: qRelevance__gte description: 'Sets the current minimum similarity threshold that is used with the `q` parameter. The threshold must be between 0 and 1 (float, default is 0.5). ' schema: type: number format: float minimum: 0 maximum: 1 example: 0.5 default: 0.5 responses: forbidden: description: You have no permission to access the specified resource. content: application/json: schema: $ref: '#/components/schemas/ApiV3Error' examples: invalidPermission: value: code: 403 status: permissionDenied message: The client caller does not have permission for the specified operation details: - type: errorInfo reason: invalidPermission domain: apiv3 metadata: path: /api/v3.0/ wrongEdition: value: code: 403 status: permissionDenied message: This feature is not enabled for the account details: - type: errorInfo reason: wrongEdition domain: apiv3 metadata: path: /api/v3.0/locations wrongAccountType: value: code: 403 status: permissionDenied message: This feature is only available for end users details: - type: errorInfo reason: wrongAccountType domain: apiv3 metadata: path: /api/v3.0/locations resourceNotFound: description: Referenced resource could not be found. content: application/json: schema: $ref: '#/components/schemas/ApiV3Error' examples: endpointNotFound: value: code: 404 status: notFound message: The API endpoint was not found details: - type: errorInfo reason: endpointNotFound domain: apiv3 metadata: path: /api/v3.0/ resourceNotFound: value: code: 404 status: notFound message: The resource was not found details: - type: errorInfo reason: resourceNotFound domain: apiv3 metadata: path: /api/v3.0/ - type: resourceInfo resource: ids: - internalServerError: description: Something went wrong in the server. Please try again. content: application/json: schema: $ref: '#/components/schemas/ApiV3Error' example: code: 500 status: internal message: An internal error has occurred. Please try again later. details: - type: errorInfo reason: unexpectedError domain: apiv3 metadata: path: /api/v3.0/ unauthorized: description: You are not authenticated. Please authenticate and try again. content: application/json: schema: $ref: '#/components/schemas/ApiV3Error' example: code: 401 status: unauthenticated message: The client caller does not have a valid authentication credential details: - type: errorInfo reason: unauthenticated domain: apiv3 metadata: path: /api/v3.0/ validationError: description: The supplied object is invalid. Error detail will contain the validation error. content: application/json: schema: $ref: '#/components/schemas/ApiV3Error' examples: unexpectedArgument: value: code: 400 status: invalidArgument message: 'Unexpected argument: name' details: - type: errorInfo reason: unexpectedArgument domain: apiv3 metadata: path: /api/v3.0/ missingRequiredArgument: value: code: 400 status: invalidArgument message: 'Missing required arguments: name, id' details: - type: errorInfo reason: missingRequiredArgument domain: apiv3 metadata: path: /api/v3.0/ badRequestInvalidJSON: value: code: 400 status: invalidArgument message: Invalid JSON details: - type: errorInfo reason: invalidJSON domain: apiv3 metadata: path: /api/v3.0/ badRequestInvalidArgument: value: code: 400 status: invalidArgument message: 'Invalid Argument: Argument name is too long' details: - type: errorInfo reason: wrongArgumentValue domain: apiv3 metadata: path: /api/v3.0/ - type: badRequest argumentViolations: - argumentName: name description: Name is too long securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT x-provenance: method: searched source: https://developer.eagleeyenetworks.com/reference harvested: '2026-10-14' tool: harvest-readme-openapi.py note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored. assembled_from: - https://developer.eagleeyenetworks.com/reference/createfloor.md - https://developer.eagleeyenetworks.com/reference/createlayout.md - https://developer.eagleeyenetworks.com/reference/createlocation.md - https://developer.eagleeyenetworks.com/reference/deletefloor.md - https://developer.eagleeyenetworks.com/reference/deletefloorplan.md - https://developer.eagleeyenetworks.com/reference/deletelayout.md - https://developer.eagleeyenetworks.com/reference/deletelocation.md - https://developer.eagleeyenetworks.com/reference/getfloor.md - https://developer.eagleeyenetworks.com/reference/getfloorimage.md - https://developer.eagleeyenetworks.com/reference/getfloorplans.md - https://developer.eagleeyenetworks.com/reference/getlayout.md - https://developer.eagleeyenetworks.com/reference/getlayouts.md - https://developer.eagleeyenetworks.com/reference/getlocation.md - https://developer.eagleeyenetworks.com/reference/getlocationdescendants.md - https://developer.eagleeyenetworks.com/reference/getlocationfloors.md - https://developer.eagleeyenetworks.com/reference/getlocations.md - https://developer.eagleeyenetworks.com/reference/gettags.md - https://developer.eagleeyenetworks.com/reference/setfloorplan.md - https://developer.eagleeyenetworks.com/reference/updatefloor.md - https://developer.eagleeyenetworks.com/reference/updatelayout.md - https://developer.eagleeyenetworks.com/reference/updatelocation.md merge: pages: 21 deduped: 448 conflicts_kept_first: 0