LVT · OpenAPI Overlay 1.0.0

API Evangelist enrichment overlay for the LVT Partner API

9 actions 9 updates update extends https://raw.githubusercontent.com/LiveViewTech/lvt-public-api/master/api-specs/api.yaml
Generated by API Evangelist Written by API Evangelist tooling for LVT's API. It is a proposal applied on top of the contract, not a document LVT publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

sourcecontactx-support-emailx-access-modelx-status-pagex-manualx-version-discrepancyx-stability

Targets 8

$.info
$.servers[0]
$.paths['/cameras/{cameraId}/streams'].post
$.paths['/webhooks'].post
$.paths['/webhooks:test'].post
$.paths['/alerts/media/{mediaId}/url'].get
$.components.schemas.error
$

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enrichment overlay for the LVT Partner API
  version: 1.0.0
x-provenance:
  generated: '2026-08-25'
  method: generated
  source: openapi/lvt-partner-api-openapi.yml
  extends: openapi/lvt-partner-api-openapi.yml
  note: >-
    This overlay records API Evangelist's enrichment of LVT's published contract. It is NEVER applied to
    the original — openapi/lvt-partner-api-openapi.yml stays byte-identical to what LVT publishes at
    https://github.com/LiveViewTech/lvt-public-api/blob/master/api-specs/api.yaml. Every action below is
    grounded in a fact LVT publishes elsewhere (its Partner API manual, its GitHub README, or its own
    pricing page); no operation, parameter or response is invented.
extends: https://raw.githubusercontent.com/LiveViewTech/lvt-public-api/master/api-specs/api.yaml
actions:
- target: $.info
  description: Attach contact, licence posture and access model that LVT documents outside the spec.
  update:
    contact:
      name: LVT Integrations
      email: integrations@lvt.com
      url: https://docs.lvt.com/r/lvt-partner-api-manual
    x-support-email: support@lvt.com
    x-access-model: >-
      Partnership-gated. Prerequisites are an account with LVT and a partnership agreement; client ID
      and secret are issued by LVT on request to integrations@lvt.com.
    x-status-page: https://status.lvt.com/
    x-manual: https://docs.lvt.com/r/lvt-partner-api-manual
- target: $.info
  description: >-
    Record that the manual header still declares VERSION 1.0.0 while this document declares 1.0.1.
  update:
    x-version-discrepancy: >-
      https://docs.lvt.com/r/lvt-partner-api-manual is headed "VERSION 1.0.0"; info.version here is
      1.0.1. Observed 2026-08-25.
- target: $.servers[0]
  description: Make explicit that LVT itself labels the only server "Production beta version".
  update:
    x-stability: production-beta
- target: $.paths['/cameras/{cameraId}/streams'].post
  description: >-
    Surface the stream keep-alive contract that the manual documents but the spec does not state.
  update:
    x-lifecycle:
      keep_alive: 'POST /streams/{streamId}:checkIn on the returned refreshInterval (example 10000 ms)'
      terminate: 'DELETE /streams/{streamId}'
      auto_expiry: >-
        The stream times out on its own if check-in stops. The concrete timeout is longer than
        refreshInterval but is not published. After expiry or checkout, checkIn and DELETE on that
        streamId return 404.
      protocols: 'Query GET /cameras/{cameraId}/protocols first; rtsp and webrtc are documented.'
      source: https://docs.lvt.com/r/lvt-partner-api-manual
- target: $.paths['/webhooks'].post
  description: Surface the delivery, signing and auto-disable rules documented in the manual.
  update:
    x-delivery:
      signature_headers: [X-LVT-HMAC-SHA256, X-LVT-PUBKEY-URL]
      algorithm: SHA256
      retry: 'exponential backoff of attempt ^ 2 seconds, up to 10 attempts'
      auto_disable: 'disabled after 10 failed attempts, with no notification sent'
      recovery: 'PATCH /webhooks/{webhookId} to re-enable'
      url_requirement: 'HTTPS only; HTTP explicitly disallowed'
      validated_on_write: true
      source: https://docs.lvt.com/r/lvt-partner-api-manual
- target: $.paths['/webhooks:test'].post
  description: Record the undocumented-in-spec test helpers, and that this is the API's only dry-run.
  update:
    x-dry-run: true
    x-test-helpers:
      action: 'query param — makes the test message match a specific action''s documented example'
      data: 'body field — an unvalidated object that overrides the test message''s data payload'
      mimeType: 'query param — image/jpeg or video/mp4, only for the mediaAvailable action (defaults to video)'
    x-semantics: '204 means a subsequent POST /webhooks will succeed; 400 means it will not.'
    source: https://docs.lvt.com/r/lvt-partner-api-manual
- target: $.paths['/alerts/media/{mediaId}/url'].get
  description: Record the signed-URL expiry LVT states in its GitHub README.
  update:
    x-signed-url-ttl: 1800
    x-signed-url-ttl-note: 'The signed media URL expires after 30 minutes.'
    source: https://github.com/LiveViewTech/lvt-public-api
- target: $.components.schemas.error
  description: >-
    Flag the required/property mismatch in LVT's own error schema so downstream generators do not
    silently produce an unsatisfiable model.
  update:
    x-defect: >-
      `required` lists `errorCause` (singular) but the defined property is `errorCauses` (plural).
      Observed in info.version 1.0.1 on 2026-08-25.
- target: $
  description: >-
    Record the enrichment gaps API Evangelist found in the published contract, as a single machine-
    readable block. These are findings ABOUT the contract, not changes to it.
  update:
    x-api-evangelist-findings:
      operations_without_operationId: 13
      operations_without_operationId_areas: [Events, Media, Webhooks, PublicKeys]
      duplicate_semantics_operationId: >-
        PUT and PATCH on /cameras/{cameraId}/position carry operationIds UpdateCameraPosition and
        UpdateCameraPosition2 — the "2" suffix leaks a generator artifact into the public contract.
      no_429_declared: true
      no_idempotency_mechanism: true
      no_request_id_header: true
      no_examples_on_operations: 'Examples appear on schema properties, not as operation-level request/response examples.'
      onvif_not_in_contract: >-
        LVT units present to third-party VMS platforms as ONVIF cameras, and the manual documents the
        per-unit ONVIF port assignment and the RuleEngine/LVT/<eventType> message namespace, but the
        OpenAPI never mentions ONVIF and no WSDL or device profile is published.
      no_asyncapi: >-
        A fully specified 7-action webhook surface exists in prose with no AsyncAPI document to describe it.

Work with this as data

Every overlay here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/lvt-partner-api-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.