{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/istreamplanet/main/json-schema/istreamplanet-generic-signal-schema.json",
  "title": "GenericSignal",
  "x-generated": "2026-10-09",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/istreamplanet-aventus-channels-openapi.yml#/components/schemas/GenericSignal",
  "additionalProperties": false,
  "properties": {
    "delivery_restrictions": {
      "$ref": "#/$defs/DeliveryRestrictions",
      "description": "Delivery restrictions for the resulting signaling segment"
    },
    "duration": {
      "default": 0,
      "description": "Splice duration (ms). If no duration or a duration of 0 then the default duration for the segment type is used.",
      "format": "int64",
      "type": "integer"
    },
    "event_id": {
      "description": "Identifies the active signaling segment. Use the same event_id for both START and END to reference the same segment. When signaling two STARTs with the same event_id, the second one will result in an error (ALREADY_EXISTS). Signaling a second start with a different event_id will end a previous active segment of the same type. After a segment has ended, its event_id can be reused. IDs are namespaced by segment type. E.g. it is allowed to have an active Chapter and an active Program with the same event_id. This field corresponds to SCTE-35 segmentation_event_id and splice_event_id.",
      "format": "int32",
      "minimum": 0,
      "type": "integer"
    },
    "segment_type": {
      "description": "The signaling segment type which is going to start/end/etc. This is used to mark programs, chapters, ad insertion points, video slating, etc.",
      "enum": [
        "splice_insert",
        "content_id",
        "program",
        "program_breakaway",
        "chapter",
        "break",
        "opening_credit",
        "closing_credit",
        "provider_placement",
        "distributor_placement",
        "provider_overlay",
        "distributor_overlay",
        "provider_ad",
        "distributor_ad",
        "unscheduled_event",
        "network",
        "slate",
        "timed_metadata"
      ],
      "type": "string"
    },
    "signal_type": {
      "description": "Whether this signal will start/end/etc a signaling segment",
      "enum": [
        "start",
        "end",
        "breakaway",
        "resumption"
      ],
      "type": "string"
    },
    "slate_uri": {
      "description": "Slate url",
      "format": "uri",
      "type": "string"
    },
    "timed_metadata_payload": {
      "description": "Timed metadata opaque payload data",
      "type": "string"
    },
    "timed_metadata_type": {
      "description": "The timed metadata signal's type",
      "type": "string"
    },
    "type": {
      "description": "Qualifier type",
      "enum": [
        "none",
        "overlap",
        "in_progress"
      ],
      "type": "string"
    },
    "upids": {
      "description": "UPIDs",
      "items": {
        "type": "string"
      },
      "type": [
        "array",
        "null"
      ]
    }
  },
  "required": [
    "signal_type",
    "segment_type",
    "event_id"
  ],
  "type": "object",
  "$defs": {
    "DeliveryRestrictions": {
      "additionalProperties": false,
      "properties": {
        "archive_allowed": {
          "type": "boolean"
        },
        "device_restrictions": {
          "enum": [
            "undefined",
            "none",
            "restrict_group0",
            "restrict_group1",
            "restrict_group2"
          ],
          "type": "string"
        },
        "no_regional_blackout": {
          "type": "boolean"
        },
        "web_delivery_allowed": {
          "type": "boolean"
        }
      },
      "type": "object"
    }
  }
}