Amigo Events API
The Events API from Amigo — 1 operation(s) for events.
The Events API from Amigo — 1 operation(s) for events.
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