Amigo Events API

The Events API from Amigo — 1 operation(s) for events.

OpenAPI Specification

amigo-events-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Amigo Account Events API
  version: 0.1.0
servers:
- url: https://api.amigo.ai
- url: https://internal-api.amigo.ai
- url: https://api-eu-central-1.amigo.ai
- url: https://api-ap-southeast-2.amigo.ai
- url: https://api-ca-central-1.amigo.ai
security:
- Bearer-Authorization: []
  Bearer-Authorization-Organization: []
  Basic: []
tags:
- name: Events
paths:
  /v1/{workspace_id}/events/stream:
    get:
      tags:
      - Events
      summary: Event Stream
      description: Server-Sent Events stream for real-time workspace updates.
      operationId: get-event-stream
      responses:
        '200':
          description: SSE stream
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WorkspaceSSEEvent'
            text/event-stream:
              schema:
                $ref: '#/components/schemas/WorkspaceSSEEvent'
        '429':
          description: Rate limit exceeded
      parameters:
      - name: workspace_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Workspace Id
components:
  schemas:
    NarrativeUpdatedEvent:
      properties:
        event_type:
          const: self_image.brief_generated
          default: self_image.brief_generated
          title: Event Type
          type: string
        target_entity_id:
          format: uuid
          title: Target Entity Id
          type: string
        target_entity_type:
          title: Target Entity Type
          type: string
        event_id:
          format: uuid
          title: Event Id
          type: string
        version:
          title: Version
          type: string
        confidence:
          title: Confidence
          type: number
        event_count:
          title: Event Count
          type: integer
      required:
      - target_entity_id
      - target_entity_type
      - event_id
      - version
      - confidence
      - event_count
      title: NarrativeUpdatedEvent
      type: object
    ChannelEmailClickedEvent:
      properties:
        event_type:
          const: channel.email_clicked
          default: channel.email_clicked
          title: Event Type
          type: string
        email_id:
          title: Email Id
          type: string
        to_address:
          title: To Address
          type: string
          x-phi: true
      required:
      - email_id
      - to_address
      title: ChannelEmailClickedEvent
      type: object
    WorkspaceMemberRoleUpdatedEvent:
      properties:
        event_type:
          const: workspace.member_role_updated
          default: workspace.member_role_updated
          title: Event Type
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        role:
          title: Role
          type: string
        previous_role:
          title: Previous Role
          type: string
      required:
      - entity_id
      - role
      - previous_role
      title: WorkspaceMemberRoleUpdatedEvent
      type: object
    SurfaceDeliveredEvent:
      properties:
        event_type:
          const: surface.delivered
          default: surface.delivered
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        channel:
          title: Channel
          type: string
        channel_address:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Channel Address
          x-phi: true
        delivery_status:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Delivery Status
        message_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Message Id
        short_url:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Short Url
      required:
      - surface_id
      - entity_id
      - channel
      title: SurfaceDeliveredEvent
      type: object
    OperatorLeftCallEvent:
      properties:
        event_type:
          const: operator.left_call
          default: operator.left_call
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        operator_id:
          format: uuid
          title: Operator Id
          type: string
        human_segment_turn_count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          title: Human Segment Turn Count
      required:
      - call_sid
      - operator_id
      title: OperatorLeftCallEvent
      type: object
    ChannelEmailDelayedEvent:
      properties:
        event_type:
          const: channel.email_delayed
          default: channel.email_delayed
          title: Event Type
          type: string
        email_id:
          title: Email Id
          type: string
        to_address:
          title: To Address
          type: string
          x-phi: true
        from_address:
          title: From Address
          type: string
      required:
      - email_id
      - to_address
      - from_address
      title: ChannelEmailDelayedEvent
      type: object
    WorkspaceInvitationAcceptedEvent:
      properties:
        event_type:
          const: workspace.invitation_accepted
          default: workspace.invitation_accepted
          title: Event Type
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        role:
          title: Role
          type: string
      required:
      - entity_id
      - role
      title: WorkspaceInvitationAcceptedEvent
      type: object
    OperatorJoinedCallEvent:
      properties:
        event_type:
          const: operator.joined_call
          default: operator.joined_call
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        operator_id:
          format: uuid
          title: Operator Id
          type: string
        mode:
          enum:
          - listen
          - takeover
          title: Mode
          type: string
      required:
      - call_sid
      - operator_id
      - mode
      title: OperatorJoinedCallEvent
      type: object
    SurfaceSubmittedEvent:
      properties:
        event_type:
          const: surface.submitted
          default: surface.submitted
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        submitted_at:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Submitted At
        fields_submitted:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          default: null
          title: Fields Submitted
      required:
      - surface_id
      - entity_id
      title: SurfaceSubmittedEvent
      type: object
    PipelineErrorEvent:
      properties:
        event_type:
          const: pipeline.error
          default: pipeline.error
          title: Event Type
          type: string
        data_source_id:
          format: uuid
          title: Data Source Id
          type: string
        error:
          title: Error
          type: string
      required:
      - data_source_id
      - error
      title: PipelineErrorEvent
      type: object
    OperatorRegisteredEvent:
      properties:
        event_type:
          const: operator.registered
          default: operator.registered
          title: Event Type
          type: string
        operator_id:
          format: uuid
          title: Operator Id
          type: string
        timestamp:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Timestamp
      required:
      - operator_id
      title: OperatorRegisteredEvent
      type: object
    ChannelVoicemailStatusEvent:
      description: 'Ringless voicemail status callback projected from VoiceDrop. ``status``

        mirrors the channel.voicedrop_ringless_voicemails enum: delivered,

        skipped, failed, or not_delivered (pending is the row''s initial state and

        is never emitted as an event).'
      properties:
        event_type:
          const: channel.voicemail_status
          default: channel.voicemail_status
          title: Event Type
          type: string
        voicemail_id:
          format: uuid
          title: Voicemail Id
          type: string
        status:
          enum:
          - delivered
          - skipped
          - failed
          - not_delivered
          title: Status
          type: string
        recipient_phone_number:
          title: Recipient Phone Number
          type: string
          x-phi: true
      required:
      - voicemail_id
      - status
      - recipient_phone_number
      title: ChannelVoicemailStatusEvent
      type: object
    SurfaceOpenedEvent:
      properties:
        event_type:
          const: surface.opened
          default: surface.opened
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
      required:
      - surface_id
      - entity_id
      title: SurfaceOpenedEvent
      type: object
    OperatorModeChangedEvent:
      properties:
        event_type:
          const: operator.mode_changed
          default: operator.mode_changed
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        operator_id:
          format: uuid
          title: Operator Id
          type: string
        mode:
          enum:
          - listen
          - takeover
          title: Mode
          type: string
      required:
      - call_sid
      - operator_id
      - mode
      title: OperatorModeChangedEvent
      type: object
    SurfaceReshapedEvent:
      properties:
        event_type:
          const: surface.reshaped
          default: surface.reshaped
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        original_surface_id:
          format: uuid
          title: Original Surface Id
          type: string
      required:
      - surface_id
      - original_surface_id
      title: SurfaceReshapedEvent
      type: object
    TextBackgroundResultEvent:
      description: 'A background (``execution="background"``) tool finished for a web text

        conversation. Pushed live the instant the completion lands so a subscribed

        client renders the result without polling or sending another message.


        ``call_id`` is ``bg:<task_id>`` to match the card identity the next-turn drain

        surfaces (``build_background_completion_effect``), so a client that receives

        both the live push and the eventual drained card sees one consistent card.

        Web-only: ``conversation_id`` is the durable conversation UUID (non-web

        channels route by a composite key and deliver via their own transport).'
      properties:
        event_type:
          const: text.background_result
          default: text.background_result
          title: Event Type
          type: string
        conversation_id:
          format: uuid
          title: Conversation Id
          type: string
        tool_name:
          title: Tool Name
          type: string
        call_id:
          title: Call Id
          type: string
        succeeded:
          title: Succeeded
          type: boolean
        result:
          title: Result
          type: string
        depth:
          title: Depth
          type: integer
        duration_ms:
          anyOf:
          - type: number
          - type: 'null'
          default: null
          title: Duration Ms
      required:
      - conversation_id
      - tool_name
      - call_id
      - succeeded
      - result
      - depth
      title: TextBackgroundResultEvent
      type: object
    TriggerFiredEvent:
      properties:
        event_type:
          const: trigger.fired
          default: trigger.fired
          title: Event Type
          type: string
        trigger_id:
          format: uuid
          title: Trigger Id
          type: string
        trigger_name:
          title: Trigger Name
          type: string
        manual:
          default: false
          title: Manual
          type: boolean
      required:
      - trigger_id
      - trigger_name
      title: TriggerFiredEvent
      type: object
    ChannelEmailReceivedEvent:
      description: 'Inbound email persisted to channel.inbound_emails as a reply to one of

        our outbound sends. ``in_reply_to_email_id`` is the outbound row this

        inbound threads against.'
      properties:
        event_type:
          const: channel.email_received
          default: channel.email_received
          title: Event Type
          type: string
        inbound_email_id:
          title: Inbound Email Id
          type: string
        in_reply_to_email_id:
          title: In Reply To Email Id
          type: string
        from_address:
          title: From Address
          type: string
          x-phi: true
        to_address:
          title: To Address
          type: string
          x-phi: true
        subject:
          title: Subject
          type: string
      required:
      - inbound_email_id
      - in_reply_to_email_id
      - from_address
      - to_address
      - subject
      title: ChannelEmailReceivedEvent
      type: object
    CallEndedEvent:
      properties:
        event_type:
          const: call.ended
          default: call.ended
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        direction:
          enum:
          - inbound
          - outbound
          - playground
          - simulated
          - test
          title: Direction
          type: string
        duration_seconds:
          title: Duration Seconds
          type: number
        completion_reason:
          enum:
          - completed
          - abandoned
          - escalated
          - transferred
          - timeout
          - error
          - voicemail
          - no_answer
          - caller_hangup
          - forwarded
          - terminal_state
          - warm_transfer_completed
          - no_inbound_audio
          - cancelled
          title: Completion Reason
          type: string
        escalated:
          default: false
          title: Escalated
          type: boolean
      required:
      - call_sid
      - direction
      - duration_seconds
      - completion_reason
      title: CallEndedEvent
      type: object
    CallStartedEvent:
      properties:
        event_type:
          const: call.started
          default: call.started
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        direction:
          enum:
          - inbound
          - outbound
          - playground
          - simulated
          - test
          title: Direction
          type: string
        service_id:
          format: uuid
          title: Service Id
          type: string
        caller_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Caller Id
          x-phi: true
      required:
      - call_sid
      - direction
      - service_id
      title: CallStartedEvent
      type: object
    IntegrationApprovalRejectedEvent:
      properties:
        event_type:
          const: integration.approval_rejected
          default: integration.approval_rejected
          title: Event Type
          type: string
        conversation_id:
          maxLength: 256
          minLength: 1
          title: Conversation Id
          type: string
        reason:
          anyOf:
          - maxLength: 2000
            type: string
          - type: 'null'
          default: null
          title: Reason
      required:
      - conversation_id
      title: IntegrationApprovalRejectedEvent
      type: object
    OperatorStatusChangedEvent:
      properties:
        event_type:
          const: operator.status_changed
          default: operator.status_changed
          title: Event Type
          type: string
        operator_id:
          format: uuid
          title: Operator Id
          type: string
        status:
          enum:
          - online
          - busy
          - offline
          title: Status
          type: string
      required:
      - operator_id
      - status
      title: OperatorStatusChangedEvent
      type: object
    SurfaceReviewApprovedEvent:
      properties:
        event_type:
          const: surface.review_approved
          default: surface.review_approved
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
      required:
      - surface_id
      title: SurfaceReviewApprovedEvent
      type: object
    WorkspaceMemberAddedEvent:
      properties:
        event_type:
          const: workspace.member_added
          default: workspace.member_added
          title: Event Type
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        role:
          title: Role
          type: string
      required:
      - entity_id
      - role
      title: WorkspaceMemberAddedEvent
      type: object
    PipelineSyncCompletedEvent:
      properties:
        event_type:
          const: pipeline.sync_completed
          default: pipeline.sync_completed
          title: Event Type
          type: string
        data_source_id:
          format: uuid
          title: Data Source Id
          type: string
        event_count:
          title: Event Count
          type: integer
        duration_ms:
          title: Duration Ms
          type: integer
      required:
      - data_source_id
      - event_count
      - duration_ms
      title: PipelineSyncCompletedEvent
      type: object
    TriggerCompletedEvent:
      properties:
        event_type:
          const: trigger.completed
          default: trigger.completed
          title: Event Type
          type: string
        trigger_id:
          format: uuid
          title: Trigger Id
          type: string
        trigger_name:
          title: Trigger Name
          type: string
        status:
          title: Status
          type: string
      required:
      - trigger_id
      - trigger_name
      - status
      title: TriggerCompletedEvent
      type: object
    OperatorWrapUpEvent:
      properties:
        event_type:
          const: operator.wrap_up
          default: operator.wrap_up
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        wrap_up_reason:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Wrap Up Reason
      required:
      - call_sid
      title: OperatorWrapUpEvent
      type: object
    TextAgentMessageEvent:
      description: 'An agent text turn pushed live over workspace SSE — the outbox of the

        durable text-conversation actor (text-conversation-actor Stage A).


        Where ``TextBackgroundResultEvent`` surfaces the raw tool card,

        this carries the agent''s *narrated* response (the turn the actor produces after

        re-entering on a background completion or other off-request signal), so a

        subscribed web client renders it as a normal agent message with no polling and

        no user turn. ``conversation_id`` is the durable conversation UUID (web-only).'
      properties:
        event_type:
          const: text.agent_message
          default: text.agent_message
          title: Event Type
          type: string
        conversation_id:
          format: uuid
          title: Conversation Id
          type: string
        text:
          title: Text
          type: string
        delivery_id:
          anyOf:
          - format: uuid
            type: string
          - type: 'null'
          default: null
          title: Delivery Id
      required:
      - conversation_id
      - text
      title: TextAgentMessageEvent
      type: object
    WorkspaceSSEEvent:
      discriminator:
        mapping:
          call.ended: '#/components/schemas/CallEndedEvent'
          call.escalated: '#/components/schemas/CallEscalatedEvent'
          call.started: '#/components/schemas/CallStartedEvent'
          channel.email_bounced: '#/components/schemas/ChannelEmailBouncedEvent'
          channel.email_clicked: '#/components/schemas/ChannelEmailClickedEvent'
          channel.email_complained: '#/components/schemas/ChannelEmailComplainedEvent'
          channel.email_delayed: '#/components/schemas/ChannelEmailDelayedEvent'
          channel.email_delivered: '#/components/schemas/ChannelEmailDeliveredEvent'
          channel.email_opened: '#/components/schemas/ChannelEmailOpenedEvent'
          channel.email_received: '#/components/schemas/ChannelEmailReceivedEvent'
          channel.email_rejected: '#/components/schemas/ChannelEmailRejectedEvent'
          channel.voicemail_status: '#/components/schemas/ChannelVoicemailStatusEvent'
          encounter.updated: '#/components/schemas/EncounterUpdatedEvent'
          integration.approval_granted: '#/components/schemas/IntegrationApprovalGrantedEvent'
          integration.approval_rejected: '#/components/schemas/IntegrationApprovalRejectedEvent'
          operator.joined_call: '#/components/schemas/OperatorJoinedCallEvent'
          operator.left_call: '#/components/schemas/OperatorLeftCallEvent'
          operator.mode_changed: '#/components/schemas/OperatorModeChangedEvent'
          operator.profile_updated: '#/components/schemas/OperatorProfileUpdatedEvent'
          operator.registered: '#/components/schemas/OperatorRegisteredEvent'
          operator.status_changed: '#/components/schemas/OperatorStatusChangedEvent'
          operator.wrap_up: '#/components/schemas/OperatorWrapUpEvent'
          pipeline.error: '#/components/schemas/PipelineErrorEvent'
          pipeline.sync_completed: '#/components/schemas/PipelineSyncCompletedEvent'
          review.submitted: '#/components/schemas/ReviewSubmittedEvent'
          self_image.brief_generated: '#/components/schemas/NarrativeUpdatedEvent'
          simulation.turn_stored: '#/components/schemas/SimulationTurnStoredEvent'
          surface.archived: '#/components/schemas/SurfaceArchivedEvent'
          surface.created: '#/components/schemas/SurfaceCreatedEvent'
          surface.delivered: '#/components/schemas/SurfaceDeliveredEvent'
          surface.field_saved: '#/components/schemas/SurfaceFieldSavedEvent'
          surface.opened: '#/components/schemas/SurfaceOpenedEvent'
          surface.pending_review: '#/components/schemas/SurfacePendingReviewEvent'
          surface.reshaped: '#/components/schemas/SurfaceReshapedEvent'
          surface.review_approved: '#/components/schemas/SurfaceReviewApprovedEvent'
          surface.review_rejected: '#/components/schemas/SurfaceReviewRejectedEvent'
          surface.submitted: '#/components/schemas/SurfaceSubmittedEvent'
          surface.updated: '#/components/schemas/SurfaceUpdatedEvent'
          text.agent_message: '#/components/schemas/TextAgentMessageEvent'
          text.background_result: '#/components/schemas/TextBackgroundResultEvent'
          text.completed: '#/components/schemas/TextCompletedEvent'
          text.started: '#/components/schemas/TextStartedEvent'
          text.tool_started: '#/components/schemas/TextToolStartedEvent'
          trigger.completed: '#/components/schemas/TriggerCompletedEvent'
          trigger.failed: '#/components/schemas/TriggerFailedEvent'
          trigger.fired: '#/components/schemas/TriggerFiredEvent'
          workspace.invitation_accepted: '#/components/schemas/WorkspaceInvitationAcceptedEvent'
          workspace.invitation_sent: '#/components/schemas/WorkspaceInvitationSentEvent'
          workspace.member_added: '#/components/schemas/WorkspaceMemberAddedEvent'
          workspace.member_role_updated: '#/components/schemas/WorkspaceMemberRoleUpdatedEvent'
        propertyName: event_type
      oneOf:
      - $ref: '#/components/schemas/CallStartedEvent'
      - $ref: '#/components/schemas/CallEndedEvent'
      - $ref: '#/components/schemas/CallEscalatedEvent'
      - $ref: '#/components/schemas/EncounterUpdatedEvent'
      - $ref: '#/components/schemas/NarrativeUpdatedEvent'
      - $ref: '#/components/schemas/ReviewSubmittedEvent'
      - $ref: '#/components/schemas/SimulationTurnStoredEvent'
      - $ref: '#/components/schemas/SurfaceCreatedEvent'
      - $ref: '#/components/schemas/SurfaceDeliveredEvent'
      - $ref: '#/components/schemas/SurfaceUpdatedEvent'
      - $ref: '#/components/schemas/SurfaceArchivedEvent'
      - $ref: '#/components/schemas/SurfaceReshapedEvent'
      - $ref: '#/components/schemas/SurfaceSubmittedEvent'
      - $ref: '#/components/schemas/SurfaceFieldSavedEvent'
      - $ref: '#/components/schemas/SurfaceOpenedEvent'
      - $ref: '#/components/schemas/SurfacePendingReviewEvent'
      - $ref: '#/components/schemas/SurfaceReviewApprovedEvent'
      - $ref: '#/components/schemas/SurfaceReviewRejectedEvent'
      - $ref: '#/components/schemas/IntegrationApprovalGrantedEvent'
      - $ref: '#/components/schemas/IntegrationApprovalRejectedEvent'
      - $ref: '#/components/schemas/TextStartedEvent'
      - $ref: '#/components/schemas/TextCompletedEvent'
      - $ref: '#/components/schemas/TextToolStartedEvent'
      - $ref: '#/components/schemas/TextBackgroundResultEvent'
      - $ref: '#/components/schemas/TextAgentMessageEvent'
      - $ref: '#/components/schemas/TriggerFiredEvent'
      - $ref: '#/components/schemas/TriggerCompletedEvent'
      - $ref: '#/components/schemas/TriggerFailedEvent'
      - $ref: '#/components/schemas/PipelineSyncCompletedEvent'
      - $ref: '#/components/schemas/PipelineErrorEvent'
      - $ref: '#/components/schemas/OperatorRegisteredEvent'
      - $ref: '#/components/schemas/OperatorStatusChangedEvent'
      - $ref: '#/components/schemas/OperatorProfileUpdatedEvent'
      - $ref: '#/components/schemas/OperatorJoinedCallEvent'
      - $ref: '#/components/schemas/OperatorLeftCallEvent'
      - $ref: '#/components/schemas/OperatorModeChangedEvent'
      - $ref: '#/components/schemas/OperatorWrapUpEvent'
      - $ref: '#/components/schemas/WorkspaceMemberAddedEvent'
      - $ref: '#/components/schemas/WorkspaceMemberRoleUpdatedEvent'
      - $ref: '#/components/schemas/WorkspaceInvitationSentEvent'
      - $ref: '#/components/schemas/WorkspaceInvitationAcceptedEvent'
      - $ref: '#/components/schemas/ChannelEmailDeliveredEvent'
      - $ref: '#/components/schemas/ChannelEmailBouncedEvent'
      - $ref: '#/components/schemas/ChannelEmailComplainedEvent'
      - $ref: '#/components/schemas/ChannelEmailRejectedEvent'
      - $ref: '#/components/schemas/ChannelEmailDelayedEvent'
      - $ref: '#/components/schemas/ChannelEmailOpenedEvent'
      - $ref: '#/components/schemas/ChannelEmailClickedEvent'
      - $ref: '#/components/schemas/ChannelEmailReceivedEvent'
      - $ref: '#/components/schemas/ChannelVoicemailStatusEvent'
    CallEscalatedEvent:
      properties:
        event_type:
          const: call.escalated
          default: call.escalated
          title: Event Type
          type: string
        call_sid:
          title: Call Sid
          type: string
        escalation_id:
          title: Escalation Id
          type: string
        trigger:
          enum:
          - caller
          - ai
          - operator
          title: Trigger
          type: string
        reason:
          title: Reason
          type: string
      required:
      - call_sid
      - escalation_id
      - trigger
      - reason
      title: CallEscalatedEvent
      type: object
    ChannelEmailOpenedEvent:
      properties:
        event_type:
          const: channel.email_opened
          default: channel.email_opened
          title: Event Type
          type: string
        email_id:
          title: Email Id
          type: string
        to_address:
          title: To Address
          type: string
          x-phi: true
      required:
      - email_id
      - to_address
      title: ChannelEmailOpenedEvent
      type: object
    SurfaceFieldSavedEvent:
      properties:
        event_type:
          const: surface.field_saved
          default: surface.field_saved
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        field_key:
          title: Field Key
          type: string
      required:
      - surface_id
      - entity_id
      - field_key
      title: SurfaceFieldSavedEvent
      type: object
    ReviewSubmittedEvent:
      properties:
        event_type:
          const: review.submitted
          default: review.submitted
          title: Event Type
          type: string
        action:
          enum:
          - approve
          - reject
          - correct
          - batch_approve
          - batch_reject
          title: Action
          type: string
        item_id:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Item Id
        entity_id:
          anyOf:
          - format: uuid
            type: string
          - type: 'null'
          default: null
          title: Entity Id
        entity_type:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Entity Type
        count:
          anyOf:
          - type: integer
          - type: 'null'
          default: null
          title: Count
      required:
      - action
      title: ReviewSubmittedEvent
      type: object
    TriggerFailedEvent:
      properties:
        event_type:
          const: trigger.failed
          default: trigger.failed
          title: Event Type
          type: string
        trigger_id:
          format: uuid
          title: Trigger Id
          type: string
        trigger_name:
          title: Trigger Name
          type: string
        status:
          title: Status
          type: string
      required:
      - trigger_id
      - trigger_name
      - status
      title: TriggerFailedEvent
      type: object
    TextCompletedEvent:
      properties:
        event_type:
          const: text.completed
          default: text.completed
          title: Event Type
          type: string
        session_id:
          title: Session Id
          type: string
        duration_seconds:
          title: Duration Seconds
          type: number
        turn_count:
          title: Turn Count
          type: integer
        completion_reason:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Completion Reason
        final_state:
          title: Final State
          type: string
        channel_kind:
          title: Channel Kind
          type: string
      required:
      - session_id
      - duration_seconds
      - turn_count
      - final_state
      - channel_kind
      title: TextCompletedEvent
      type: object
    SurfacePendingReviewEvent:
      properties:
        event_type:
          const: surface.pending_review
          default: surface.pending_review
          title: Event Type
          type: string
        surface_id:
          format: uuid
          title: Surface Id
          type: string
        entity_id:
          format: uuid
          title: Entity Id
          type: string
        source:
          anyOf:
          - type: string
          - type: 'null'
          default: null
          title: Source
        form_template_id:
          anyOf:
          - format: uuid
            type: str

# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/amigo/refs/heads/main/openapi/amigo-events-api-openapi.yml