> ## Documentation Index
> Fetch the complete documentation index at: https://developers.govworx.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Publish an incident event

> Accepts activity for an actual or potential incident. Providers can
send a strongly typed NENA EIDO state snapshot, a strongly typed
incident-lifecycle event, or an encoded native payload for a connector
to map into EIDO. The API key determines the tenant; the envelope tenant
must match it. A successful response means the submission was validated
and durably persisted.




## OpenAPI

````yaml /connections-platform/openapi/cad.yaml post /cad/v1/incidents
openapi: 3.1.0
info:
  title: GovWorx CAD API
  version: 1.0.0
  license:
    name: Proprietary
    identifier: LicenseRef-Proprietary
  summary: CAD incident ingestion and write-back API
  description: >
    The GovWorx CAD API accepts actual or potential incident activity from CAD

    providers. Providers may submit a NENA (National Emergency Number
    Association)

    Emergency Incident Data Object (EIDO), a

    strongly typed GovWorx incident-lifecycle event, or a vendor-native format
    that

    a GovWorx connector maps into EIDO.


    Tenant identity for vendor submissions is resolved from the API key. The

    `tenantId` in an inbound envelope is a cross-check and is never used for

    routing.


    This document presents the GovWorx best-practice baseline. Connector
    profiles

    are compatibility overlays for vendor constraints; they are not separate

    product APIs. A profile may adapt vendor-facing authentication, reliability,

    acknowledgements, field names, or payload shape. Every deviation identifies
    the

    baseline rule, vendor constraint, replacement behavior, compensating
    control,

    and operational impact. The provisioned connector version pins the profile;

    neither callers nor vendors negotiate or downgrade it per request.


    GovWorx delivers CAD updates to a CAD-hosted HTTPS webhook. GovWorx sends an

    update when it has relevant data for an authorized listener. The configured

    connector maps each update into the fields and capabilities supported by the

    destination CAD.


    GovWorx assigns each outbound CAD operation a finite expiration from its

    operation and connector policy, and does not begin or retry work after it.
    The connector profile

    selects a reliability mode for each operation: `durable_idempotent`,

    `bounded_deduplication`, or `non_idempotent`. That mode determines whether
    the

    recipient enforces the expiration, how it remembers delivery IDs, and
    whether

    an ambiguous request may be retried. GovWorx does not claim exactly-once

    delivery. Every idempotent connector profile declares a maximum retry
    horizon

    and minimum delivery-ID retention. The retention period must be at least as

    long as the retry horizon. A count-only cache is opportunistic duplicate

    protection and does not establish that guarantee. Such a connector is
    treated

    as non-idempotent unless it separately guarantees retention through the
    entire

    retry horizon. Every permitted retry uses the same delivery ID and exact raw

    request body; only the signature timestamp and signature change. Eligible

    retries use exponential backoff with jitter and honor `Retry-After` without

    crossing the expiration. Network errors, `429`, and `5xx` are retryable only

    when the selected reliability profile permits another attempt. Other `4xx`

    responses are terminal.
servers: []
security: []
tags:
  - name: Send incidents to GovWorx
    description: Actual or potential incident submissions from CAD providers.
  - name: Receive incident updates from GovWorx
    description: Signed updates delivered by GovWorx to a CAD-hosted HTTPS endpoint.
externalDocs:
  description: Pinned NENA EIDO 1.0.1 normative schema
  url: >-
    https://github.com/NENA911/EIDO-JSON/blob/1ea5750ba2ef4ea3ec5726222e8bf571d68b1d32/Schema/openapi.yaml
paths:
  /cad/v1/incidents:
    post:
      tags:
        - Send incidents to GovWorx
      summary: Publish an incident event
      description: |
        Accepts activity for an actual or potential incident. Providers can
        send a strongly typed NENA EIDO state snapshot, a strongly typed
        incident-lifecycle event, or an encoded native payload for a connector
        to map into EIDO. The API key determines the tenant; the envelope tenant
        must match it. A successful response means the submission was validated
        and durably persisted.
      operationId: publishIncidentEvent
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IncidentSubmission'
            examples:
              lifecycle:
                summary: Strongly typed incident lifecycle
                value:
                  tenantId: 12345
                  provider: primary-cad-interface
                  format: govworx-incident-lifecycle
                  format_version: '1.0'
                  timestamp: '2026-08-26T20:14:31Z'
                  data:
                    eventType: incident.linked
                    correlationId: interaction-456
                    cadIncidentId: CAD-12345
              encoded:
                summary: Opaque vendor payload
                value:
                  tenantId: 12345
                  provider: primary-cad-interface
                  format: vendor-native
                  format_version: vendor-native/1.0
                  timestamp: '2026-08-26T20:14:31Z'
                  mediaType: application/json
                  encoding: base64
                  data: eyJpbmNpZGVudElkIjoiQ0FELTEyMzQ1In0=
      responses:
        '200':
          description: The incident submission was accepted and durably persisted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IncidentSubmissionReceipt'
              example:
                submissionId: >-
                  6c99a1a89bb598e95f412dc144b95f47de57fca9878f4a225b58180bde1775a2
                eventId: >-
                  82c5830851a0d02c4000e85d734c726f50518cf3e051454a51a3555dd8aece77
                status: accepted
                timestamp: '2026-08-26T20:14:32Z'
        '400':
          $ref: '#/components/responses/InvalidRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
      security:
        - TenantApiKey: []
components:
  schemas:
    IncidentSubmission:
      oneOf:
        - $ref: '#/components/schemas/EidoIncidentSubmission'
        - $ref: '#/components/schemas/IncidentLifecycleSubmission'
        - $ref: '#/components/schemas/VendorNativeIncidentSubmission'
      discriminator:
        propertyName: format
        mapping:
          nena-eido:
            $ref: '#/components/schemas/EidoIncidentSubmission'
          govworx-incident-lifecycle:
            $ref: '#/components/schemas/IncidentLifecycleSubmission'
          vendor-native:
            $ref: '#/components/schemas/VendorNativeIncidentSubmission'
    IncidentSubmissionReceipt:
      type: object
      additionalProperties: false
      required:
        - submissionId
        - status
        - timestamp
      properties:
        submissionId:
          type: string
          pattern: ^[a-f0-9]{64}$
          description: |
            Lowercase hexadecimal SHA-256 digest of the exact request-body bytes
            received after HTTP content decoding. A byte-identical retry returns
            the same submission identifier even when the submission represents a
            lifecycle transition rather than a normalized incident event.
        eventId:
          type: string
          pattern: ^[a-f0-9]{64}$
          description: |
            Identifier of the normalized incident event produced by this
            submission. Omitted when the submission only records a pre-bind
            lifecycle transition or otherwise produces no normalized event.
        status:
          type: string
          const: accepted
        timestamp:
          type: string
          format: date-time
          description: GovWorx receipt time.
    EidoIncidentSubmission:
      title: Strongly typed NENA EIDO submission
      type: object
      additionalProperties: false
      required:
        - tenantId
        - provider
        - format
        - format_version
        - timestamp
        - data
      properties:
        tenantId:
          type: integer
          format: int64
          minimum: 1
          description: Must match the tenant resolved from the API key.
        provider:
          $ref: '#/components/schemas/ProviderIdentifier'
        format:
          type: string
          const: nena-eido
          description: Identifies the payload as a NENA EIDO JSON object.
        format_version:
          type: string
          const: '1.0'
          description: |
            NENA EIDO structure version. GovWorx validates against the pinned
            NENA OpenAPI schema release 1.0.1.
        timestamp:
          type: string
          format: date-time
          description: Time the vendor created the envelope.
        data:
          $ref: '#/components/schemas/GovWorxCadEidoProfile'
    IncidentLifecycleSubmission:
      title: Strongly typed incident-lifecycle submission
      type: object
      additionalProperties: false
      required:
        - tenantId
        - provider
        - format
        - format_version
        - timestamp
        - data
      properties:
        tenantId:
          type: integer
          format: int64
          minimum: 1
          description: Must match the tenant resolved from the API key.
        provider:
          $ref: '#/components/schemas/ProviderIdentifier'
        format:
          type: string
          const: govworx-incident-lifecycle
          description: Identifies a strongly typed GovWorx incident-lifecycle event.
        format_version:
          type: string
          const: '1.0'
        timestamp:
          type: string
          format: date-time
          description: Time the provider created the envelope.
        data:
          $ref: '#/components/schemas/IncidentLifecycleEvent'
    VendorNativeIncidentSubmission:
      title: Encoded vendor-native incident submission
      type: object
      additionalProperties: false
      required:
        - tenantId
        - provider
        - format
        - format_version
        - timestamp
        - mediaType
        - encoding
        - data
      properties:
        tenantId:
          type: integer
          format: int64
          minimum: 1
          description: Must match the tenant resolved from the API key.
        provider:
          $ref: '#/components/schemas/ProviderIdentifier'
        format:
          type: string
          const: vendor-native
          description: Identifies a provider-specific record that must be mapped into EIDO.
        format_version:
          type: string
          minLength: 1
          maxLength: 100
          description: Version of the provider's wire contract.
        timestamp:
          type: string
          format: date-time
          description: Time the vendor created the envelope.
        mediaType:
          type: string
          enum:
            - application/json
            - application/xml
            - text/csv
          description: Media type of the decoded vendor record.
        encoding:
          type: string
          const: base64
        data:
          type: string
          contentEncoding: base64
          description: Base64-encoded full vendor record in the declared media type.
    ErrorResponse:
      type: object
      additionalProperties: false
      required:
        - code
        - message
      properties:
        code:
          type: string
        message:
          type: string
        details:
          type: array
          items:
            $ref: '#/components/schemas/ErrorDetail'
    ProviderIdentifier:
      type: string
      minLength: 1
      maxLength: 100
      description: |
        Stable identifier for the submitting CAD interface, system, or vendor
        implementation. It identifies the payload producer; `format` and
        `format_version` separately identify the payload contract. The value
        must match a provider supported by the tenant's configured CAD
        connection, such as `primary-cad-interface` or `regional-cad-feed`.
    GovWorxCadEidoProfile:
      title: NENA EIDO object
      description: >-
        Opaque rendering of a complete NENA (National Emergency Number
        Association) EIDO 1.0 object. GovWorx validates this value against the
        pinned NENA EIDO 1.0.1 normative schema linked in externalDocs. GovWorx
        adopts NENA schema updates through a published contract revision. Do not
        use this rendered OpenAPI schema for client-side EIDO validation.
      type: object
      additionalProperties: true
    IncidentLifecycleEvent:
      oneOf:
        - $ref: '#/components/schemas/IncidentStartedEvent'
        - $ref: '#/components/schemas/IncidentLinkedEvent'
        - $ref: '#/components/schemas/IncidentCanceledEvent'
      discriminator:
        propertyName: eventType
        mapping:
          incident.started:
            $ref: '#/components/schemas/IncidentStartedEvent'
          incident.linked:
            $ref: '#/components/schemas/IncidentLinkedEvent'
          incident.canceled:
            $ref: '#/components/schemas/IncidentCanceledEvent'
    ErrorDetail:
      type: object
      additionalProperties: false
      required:
        - field
        - message
      properties:
        field:
          type: string
        message:
          type: string
    IncidentStartedEvent:
      title: Potential incident started
      type: object
      additionalProperties: false
      required:
        - eventType
        - correlationId
      properties:
        eventType:
          type: string
          const: incident.started
        correlationId:
          $ref: '#/components/schemas/IncidentCorrelationId'
        startedAt:
          type: string
          format: date-time
          description: Time the potential incident or associated interaction began.
        callTakerIdentifier:
          type: string
          minLength: 1
          maxLength: 200
        callPosition:
          type: string
          minLength: 1
          maxLength: 200
        primaryDiscipline:
          $ref: '#/components/schemas/CadDiscipline'
        intakeChannel:
          type: string
          minLength: 1
          maxLength: 100
        bestKnown:
          $ref: '#/components/schemas/BestKnownCallData'
    IncidentLinkedEvent:
      title: Potential incident linked to a CAD incident
      type: object
      additionalProperties: false
      required:
        - eventType
        - correlationId
        - cadIncidentId
      properties:
        eventType:
          type: string
          const: incident.linked
        correlationId:
          $ref: '#/components/schemas/IncidentCorrelationId'
        cadIncidentId:
          type: string
          minLength: 1
          maxLength: 200
          description: CAD-assigned identifier for the linked incident.
        primaryDiscipline:
          $ref: '#/components/schemas/CadDiscipline'
    IncidentCanceledEvent:
      title: Potential incident canceled
      type: object
      additionalProperties: false
      required:
        - eventType
        - correlationId
      properties:
        eventType:
          type: string
          const: incident.canceled
        correlationId:
          $ref: '#/components/schemas/IncidentCorrelationId'
        reason:
          type: string
          minLength: 1
          maxLength: 500
    IncidentCorrelationId:
      type: string
      minLength: 1
      maxLength: 100
      description: |
        Stable provider-assigned identifier that correlates activity for a
        potential incident before and after a CAD incident ID is available.
    CadDiscipline:
      type: string
      enum:
        - law_enforcement
        - fire
        - ems
      description: |
        Vendor-neutral incident discipline. A connector profile maps this value
        to the destination CAD's required field name and representation.
    BestKnownCallData:
      type: object
      additionalProperties: false
      properties:
        callerPhone:
          type: string
        location:
          $ref: '#/components/schemas/Location'
    Location:
      type: object
      additionalProperties: false
      properties:
        address:
          type: string
        city:
          type: string
        state:
          type: string
        postalCode:
          type: string
        latitude:
          type: number
          minimum: -90
          maximum: 90
        longitude:
          type: number
          minimum: -180
          maximum: 180
      anyOf:
        - required:
            - address
        - required:
            - latitude
            - longitude
  responses:
    InvalidRequest:
      description: The request failed schema or connector-configuration validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            code: invalid_request
            message: The request contains invalid fields.
            details:
              - field: format
                message: >-
                  Must be nena-eido, govworx-incident-lifecycle, or
                  vendor-native.
    Unauthorized:
      description: The supplied credential is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            code: unauthorized
            message: Authentication is required.
  securitySchemes:
    TenantApiKey:
      type: http
      scheme: bearer
      bearerFormat: opaque tenant API key
      description: |
        Administratively provisioned per-tenant API key for vendor incident
        submissions. Send it as `Authorization: Bearer <tenant-api-key>`.
        Version 1 does not require an OAuth exchange or token endpoint.

````