Epsilon3 · AsyncAPI Specification

Epsilon3 Realtime Webhooks

Version

View Spec View on GitHub CompanyOperationsAerospaceSpaceDefenseManufacturingProceduresWorkflowInventoryTelemetryTest ManagementProject ManagementMCPAsyncAPIWebhooksEvents

AsyncAPI Specification

epsilon3-realtime-webhooks.yml Raw ↑
generated: '2026-08-12'
method: searched
source: https://docs.epsilon3.io/#realtime-introduction
spec_type: none
spec_note: >-
  Epsilon3 publishes NO AsyncAPI document. It does publish a substantial, fully documented
  event surface - four SocketIO namespaces with named events and payload schemas in prose,
  plus a signed webhook transport carrying the same payloads. This file captures that
  catalog verbatim from the docs so the event surface is recorded; it is deliberately NOT
  written as an AsyncAPI document, because Epsilon3 does not publish one and authoring one
  would misattribute it to them.
transports:
- id: socketio
  protocol: Socket.IO over WebSocket
  auth: team-scoped Epsilon3 API key (EPSILON3_API_KEY); user-scoped keys are rejected
  direction: bidirectional
  sample_client: https://docs.epsilon3.io/examples/client-python-socketio.tar.gz
- id: webhooks
  protocol: HTTPS POST to a customer-hosted endpoint
  auth: >-
    Epsilon3-Signature header verified against a per-workspace webhook key
    (EPSILON3_WEBHOOK_KEY). Registration of the webhook key is not self-service - the docs
    say to contact Epsilon3 support.
  signature_header: Epsilon3-Signature
  signature_algorithm_published: false
  verification_helper: python module webhook_auth, function verify_webhook_signature
  sample_client: https://docs.epsilon3.io/examples/client-python-webhooks.tar.gz
  direction: Epsilon3 -> customer, with a synchronous response body carrying the result
channels:
- namespace: /v1/commands/realtime
  module: Commanding
  direction: Epsilon3 -> client (request), client -> Epsilon3 (result)
  events:
  - name: send_command
    direction: inbound to client
    payload_fields:
    - {field: name, required: true, description: the command name}
    - {field: dictionary_id, required: false, description: id of the command dictionary;
        default dictionary when omitted}
    - {field: arguments, required: false, description: dictionary of command arguments}
    - {field: operation, required: false, description: name of the operation the run belongs
        to}
    - {field: variables, required: false, description: procedure variables and their values}
    - {field: metadata, required: true, description: user, run_id, run_starttime,
        procedure_code, procedure_name, procedure_version}
    - {field: correlation_id, required: false, description: presence makes the command
        ASYNCHRONOUS and must be echoed on completion}
  - name: command_finished
    direction: outbound from client
    description: >-
      Completion event for asynchronous commands. Client returns {"status":"executing"}
      immediately, processes in the background, then emits command_finished with
      status success|failure|timeout, correlation_id, results and completed_at.
  semantics:
    synchronous_default_timeout: 55 seconds
    max_timeout: 18000 seconds (5 hours)
    cancellation: not supported except via timeout
    response_fields: [name, success, received_at, message]
  related_rest_api: /v1/commands
- namespace: /v1/external-data/items
  module: External Data
  direction: Epsilon3 -> client (query), client -> Epsilon3 (items)
  events:
  - name: search
    direction: inbound to client
  - name: item
    direction: inbound to client
  request_fields:
  - {field: type, description: External Data Item type to query}
  - {field: term, description: query search string; an empty term should return all items}
  - {field: dictionary_id}
  - {field: metadata, description: user, run_id, run_starttime, procedure_code,
      procedure_name, procedure_version}
  response_fields:
  - {field: type, required: true}
  - {field: success, required: true}
  - {field: message, required: false}
  - {field: items, required: true, description: 'array of {id (required), name (required),
      label, url, valid, details[{name,value}]}'}
  related_rest_api: /v1/external-data
- namespace: /v1/notifications/realtime
  module: Notifications
  direction: Epsilon3 -> client
  events:
  - name: notification
    direction: inbound to client
    ack: 'client returns {"received": true|false}; false or no response renders a failure
      indicator in the Epsilon3 UI'
    payload_fields:
    - {field: id}
    - {field: type}
    - {field: subtype}
    - {field: timestamp, format: ISO-8601}
    - {field: api_version, type: float}
    - {field: data, description: message, run_url, section_name, step_name, users_to_notify,
        remaining_operator_roles, notification_source}
  subtypes:
  - at_mention
  - automation
  - comment_resolved
  - issue_assignee
  - issue_collaborator
  - issue_updated
  - operation_assignee
  - part_reviewers
  - parts
  - procedure_generation
  - procedure_review_comment
  - procedure_review_complete
  - remaining_step_operators
  - reviewers
  - run_ended
  - run_started
  - saved_view_match
  - skill_expiration
  - step_completed
  - suggested_edit
  - tool
  - work_order_assignee
  - work_order_created
  - workflow
  subtype_count: 23
- namespace: /v1/telemetry/realtime
  module: Telemetry
  direction: bidirectional streaming
  transport_note: SocketIO only - the docs describe this namespace for SocketIO clients
  events:
  - name: start_stream
    direction: inbound to client
    payload_fields: [name, stream_id, refresh_rate, dictionary_id, operation, variables,
      metadata]
    defaults: {refresh_rate: 1 second}
  - name: data_update
    direction: outbound from client
    payload_forms:
    - {form: single, fields: 'stream_id, data{value, recorded_at (ISO-8601)}'}
    - {form: multiple, fields: 'stream_id, data{values[{timestamp (unix ms), value}]}'}
    max_payload: 100KB
    rate_limits: {per_team: 1000/sec, per_stream: 4/sec, behavior: silently dropped and
        reported on telemetry_connection_status}
  - name: end_streams
    direction: inbound to client
    payload_fields: [stream_ids]
  - name: disconnect
    direction: inbound to client
    description: client should clean up all active streams and reset state
  - name: error
    direction: inbound to client
    description: emitted when issues occur with telemetry streaming
  - name: telemetry_connection_status
    direction: inbound to client
    description: >-
      diagnostics covering dangling streams that should have been terminated, exceeded
      rate limits with drop counts, and other connection health information
  related_rest_api: /v1/telemetry/parameters
regions:
  us: https://api.epsilon3.io
  uk: https://api.uk.epsilon3.io
  env_var: EPSILON3_API_URL
summary:
  namespaces: 4
  named_events: 13
  notification_subtypes: 23
  asyncapi_published: false
  webhooks_published: true
  signed: true
gaps:
- No AsyncAPI (or any machine-readable event) document, so the event catalog above cannot
  be consumed programmatically.
- The webhook signature algorithm is unpublished - a non-Python integrator cannot verify
  signatures without contacting Epsilon3 support.
- Webhook key registration is manual and sales/support-mediated, not self-service.
- No published retry/redelivery policy for webhook deliveries.