Waveline API models
API reference · OpenAPI specification
These schemas are generated from the API contract. Keep record IDs as strings. Optional fields may be absent; nullable fields may be null.
RecordId
type: string
pattern: ^[1-9][0-9]*$
maxLength: 19
description: >-
Stable existing Waveline record ID. Keep it as a string; it may exceed JavaScript's safe
integer range.
RateLimit
type: object
properties:
limit:
type: integer
remaining:
type: integer
reset_at:
type: string
format: date-time
Page
type: object
required:
- data
- next_cursor
properties:
data:
type: array
items:
type: object
next_cursor:
type:
- string
- 'null'
rate_limit:
$ref: '#/components/schemas/RateLimit'
Models: RateLimit.
Connection
type: object
required:
- id
- tenant_id
- name
- scopes
- inbox_ids
- status
- connection_mode
- subject_user_id
- access_scope
- workspace_access
properties:
id:
type: string
format: uuid
tenant_id:
$ref: '#/components/schemas/RecordId'
name:
type: string
workspace_name:
type:
- string
- 'null'
description: >-
The workspace's display name. Use it, not tenant_id, when labeling a connection for
people.
connection_mode:
type: string
enum:
- member
- workspace
description: >-
Internal ownership field. Personal-inbox connections use member; Workspace and
shared-inbox connections use workspace and are independent of the installer. This is
not a creation input.
access_scope:
type: string
enum:
- workspace
- inbox
- inboxes
- legacy
- user
description: >-
Workspace covers calls and messages across all current and future shared and
personal inboxes and syncs workspace-visible contacts; inbox covers one recorded
inbox and inboxes covers an explicitly selected shared-inbox set. Legacy grants
retain their original restricted selections. user is a personal assistant (OAuth)
connection that follows the member's live app access.
workspace_access:
type: boolean
description: >-
True only for an explicitly authorized Workspace grant. Existing grants default to
false.
subject_user_id:
type:
- string
- 'null'
format: uuid
description: >-
The authenticated member bound to a Personal connection; null for Workspace
connections. Clients cannot select or change this subject.
key_prefix:
type: string
scopes:
type: array
items:
type: string
enum:
- contacts.read
- contacts.write
- calls.read
- messages.read
- inboxes.read
- phone_numbers.read
- analytics.read
- webhooks.read
- webhooks.write
- messages.write
inbox_ids:
type: array
description: >-
Recorded inbox allowlist. Empty for Workspace scope; GET /v1/inboxes returns the
currently authorized inboxes.
items:
$ref: '#/components/schemas/RecordId'
status:
type: string
enum:
- active
- revoked
created_at:
type: string
format: date-time
expires_at:
type:
- string
- 'null'
format: date-time
revoked_at:
type:
- string
- 'null'
format: date-time
default_inbox_id:
type:
- string
- 'null'
description: Personal assistant (OAuth) connections only. The member's default inbox.
timezone:
type:
- string
- 'null'
description: >-
Personal assistant (OAuth) connections only. IANA timezone from the member's default
inbox business hours, otherwise from another accessible inbox; null when none is
configured.
timezone_source:
type:
- string
- 'null'
enum:
- default_inbox
- accessible_inbox
- null
Models: RecordId.
ContactCreate
type: object
additionalProperties: false
required:
- phone
properties:
display_name:
$ref: '#/components/schemas/ContactWrite/properties/display_name'
first_name:
$ref: '#/components/schemas/ContactWrite/properties/first_name'
last_name:
$ref: '#/components/schemas/ContactWrite/properties/last_name'
company:
$ref: '#/components/schemas/ContactWrite/properties/company'
role:
$ref: '#/components/schemas/ContactWrite/properties/role'
phone:
type: string
pattern: ^\+[1-9][0-9]{1,14}$
description: Required valid E.164 phone. Skip source records without a usable phone.
email:
$ref: '#/components/schemas/ContactWrite/properties/email'
Models: ContactWrite.
ContactWrite
type: object
additionalProperties: false
properties:
display_name:
type: string
minLength: 1
maxLength: 160
description: >-
Optional explicit label. Otherwise derived from first/last name, company, phone, or
email, falling back to Unknown Contact.
first_name:
type:
- string
- 'null'
maxLength: 320
last_name:
type:
- string
- 'null'
maxLength: 320
company:
type:
- string
- 'null'
maxLength: 320
role:
type:
- string
- 'null'
maxLength: 320
phone:
type:
- string
- 'null'
pattern: ^\+[1-9][0-9]{1,14}$
description: >-
Omit to preserve the saved phone. Null promotes another valid saved phone to primary
while retaining the previous number, or returns CONTACT_PHONE_REQUIRED if no other
phone remains.
email:
type:
- string
- 'null'
maxLength: 320
ContactUpsert
type: object
additionalProperties: false
required:
- external_source
- external_id
description: >-
A new external identity requires a nonnull valid phone. A known identity may omit phone
when its contact already has a valid saved phone; null follows ContactWrite promotion
rules. This depends on the saved mapping and is checked by the server.
properties:
external_source:
type: string
minLength: 1
maxLength: 160
description: >-
Stable source app/account identifier, such as hubspot:portal-123. Case-sensitive; no
surrounding whitespace or control characters.
external_id:
type: string
minLength: 1
maxLength: 200
description: >-
Source contact record ID, preserved exactly as a string. Case-sensitive; no
surrounding whitespace or control characters.
display_name:
$ref: '#/components/schemas/ContactWrite/properties/display_name'
first_name:
$ref: '#/components/schemas/ContactWrite/properties/first_name'
last_name:
$ref: '#/components/schemas/ContactWrite/properties/last_name'
company:
$ref: '#/components/schemas/ContactWrite/properties/company'
role:
$ref: '#/components/schemas/ContactWrite/properties/role'
phone:
$ref: '#/components/schemas/ContactWrite/properties/phone'
email:
$ref: '#/components/schemas/ContactWrite/properties/email'
Models: ContactWrite.
Contact
type: object
required:
- id
- display_name
- first_name
- last_name
- company
- role
- phone
- email
- created_at
- updated_at
properties:
id:
$ref: '#/components/schemas/RecordId'
display_name:
type: string
first_name:
type:
- string
- 'null'
last_name:
type:
- string
- 'null'
company:
type:
- string
- 'null'
role:
type:
- string
- 'null'
phone:
type:
- string
- 'null'
email:
type:
- string
- 'null'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
Models: RecordId.
Call
type: object
required:
- id
- session_call_sid
- direction
- start_time
- end_time
- duration_seconds
- outcome
- external_number
- called_via_number
- inbox_ids
- view_scope
- unhandled_inbox_ids
- interactions
properties:
id:
$ref: '#/components/schemas/RecordId'
session_call_sid:
type:
- string
- 'null'
direction:
type: string
enum:
- inbound
- outbound
start_time:
type:
- string
- 'null'
format: date-time
end_time:
type:
- string
- 'null'
format: date-time
duration_seconds:
type:
- integer
- 'null'
description: >-
Workspace and legacy views use elapsed end_time minus start_time, rounded down to
seconds. An inbox view uses the union of that inbox's completed interaction
intervals: overlapping interactions are counted once and time in other inboxes is
excluded. Neither measure is talk time. For inbox views this is null while any
included interaction is in progress; Workspace and legacy duration is null until the
parent call ends. Historical single-inbox calls without interaction facts retain
their aggregate elapsed duration.
outcome:
type: string
enum:
- completed
- voicemail
- forwarded
- transferred
- missed
- failed
- unknown
description: >-
Workspace and legacy views derive this in the listed precedence from persisted
interactions. An inbox view uses its final interaction's terminal disposition:
transfers, voicemail and forwarding take precedence over an earlier answer. Missed
includes abandoned/no-answer. Failed requires explicit carrier-root failure and is
not inferred from another inbox. Unknown means insufficient facts or in progress.
external_number:
type:
- string
- 'null'
called_via_number:
type:
- string
- 'null'
description: >-
Waveline phone number used for the full call. Null for a partial single-inbox view
of a multi-inbox call because the original number may belong to another inbox.
inbox_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
description: Inboxes included in this view; an inbox view contains only its selected inbox.
view_scope:
type: string
enum:
- workspace
- inbox
- inboxes
- legacy
description: >-
Determines whether timing, outcome and interactions cover the whole call or one
inbox.
unhandled_inbox_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
description: >-
Accessible inboxes where this call still needs follow-up, as in Waveline's unhandled
calls. Empty once it is answered or returned later, cleared by a teammate, or never
needed follow-up.
interactions:
type: array
items:
$ref: '#/components/schemas/CallInteraction'
description: >-
Permitted external interactions ordered by entry time and ID. Multiple visits to the
same inbox remain part of this one call entry. Historical calls can have no
interaction facts.
inbox_labels:
type: object
additionalProperties:
type: string
description: >-
Only with include_labels=true. Labels of the accessible inboxes in this record,
keyed by inbox ID.
contacts:
type: array
items:
$ref: '#/components/schemas/ContactMatch'
description: >-
Only with include_labels=true and contacts.read. Visible contacts saved with the
external number. Several matches are alternatives, not additional participants.
Models: RecordId, CallInteraction, ContactMatch.
CallInteraction
type: object
required:
- id
- inbox_id
- employee_id
- employee_name
- entry_mode
- exit_mode
- entry_at
- ringing_at
- bridged_at
- resolved_at
- bridged
- duration_seconds
- handoff_source_inbox_id
- handoff_target_inbox_id
properties:
id:
$ref: '#/components/schemas/RecordId'
inbox_id:
$ref: '#/components/schemas/RecordId'
employee_id:
type:
- string
- 'null'
pattern: ^[0-9]+$
description: >-
Actual answering employee ID, when this interaction was bridged; never a ringing
candidate.
employee_name:
type:
- string
- 'null'
description: Display name of the actual answering employee, when available.
entry_mode:
type: string
enum:
- inbound
- outbound
- forward
- blind_transfer
- attended_transfer
exit_mode:
type:
- string
- 'null'
enum:
- abandoned
- missed
- no_answer
- bridged
- voicemail
- forwarded
- blind_transfer
- attended_transfer
- null
entry_at:
type: string
format: date-time
ringing_at:
type:
- string
- 'null'
format: date-time
bridged_at:
type:
- string
- 'null'
format: date-time
resolved_at:
type:
- string
- 'null'
format: date-time
bridged:
type: boolean
duration_seconds:
type:
- integer
- 'null'
description: >-
Elapsed entry-to-resolution time rounded down to seconds; not talk time. Null while
unresolved.
handoff_source_inbox_id:
type:
- string
- 'null'
pattern: ^[0-9]+$
description: Source inbox only when it belongs to the current authorized scope; otherwise null.
handoff_target_inbox_id:
type:
- string
- 'null'
pattern: ^[0-9]+$
description: Target inbox only when it belongs to the current authorized scope; otherwise null.
Models: RecordId.
Message
type: object
required:
- id
- conversation_id
- body
- delivery_status
- direction
- from
- external_numbers
- inbox_ids
- created_at
- updated_at
- origin_connection_id
- origin_application_name
- attachments
properties:
id:
$ref: '#/components/schemas/RecordId'
conversation_id:
$ref: '#/components/schemas/RecordId'
body:
type:
- string
- 'null'
delivery_status:
type:
- string
- 'null'
description: Existing Waveline transport status; consumers must tolerate additional values.
direction:
type: string
enum:
- inbound
- outbound
from:
type:
- string
- 'null'
external_numbers:
type: array
items:
type: string
description: >-
Sorted distinct external phone participants in this authorized conversation. These
identify conversation parties, not exact delivery recipients for a transport part.
inbox_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
origin_connection_id:
type:
- string
- 'null'
format: uuid
origin_application_name:
type:
- string
- 'null'
attachments:
type: array
description: >-
Completed attachments for this message. Storage paths and signed URLs are never
included.
items:
$ref: '#/components/schemas/MessageAttachment'
inbox_labels:
type: object
additionalProperties:
type: string
description: >-
Only with include_labels=true. Labels of the accessible inboxes in this
conversation, keyed by inbox ID.
contacts:
type: array
items:
$ref: '#/components/schemas/ContactMatch'
description: >-
Only with include_labels=true and contacts.read. Visible contacts saved with each
external number.
sender_name:
type:
- string
- 'null'
description: >-
Only with include_labels=true. The teammate who sent the message; null for inbound
or automated messages.
Models: RecordId, MessageAttachment, ContactMatch.
ContactMatch
type: object
required:
- phone
- contact_id
- name
description: >-
A visible contact saved with an external number, at most five per number. The same check
as getContact applies; inaccessible contacts are never returned.
properties:
phone:
type: string
contact_id:
$ref: '#/components/schemas/RecordId'
name:
type:
- string
- 'null'
description: Display name, else first and last name; null when no name is saved.
Models: RecordId.
Conversation
type: object
required:
- id
- name
- transport
- last_message_at
- external_numbers
- inbox_ids
- last_message
- awaiting_reply
- unread
properties:
id:
$ref: '#/components/schemas/RecordId'
name:
type:
- string
- 'null'
description: Group conversation name, when set.
transport:
type: string
description: >-
internal, direct_sms or twilio_conversations_group; consumers must tolerate
additional values.
last_message_at:
type: string
format: date-time
external_numbers:
type: array
items:
type: string
inbox_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
last_message:
type:
- object
- 'null'
required:
- id
- body_preview
- direction
- sender_name
- sent_by_me
- attachment_count
- created_at
properties:
id:
$ref: '#/components/schemas/RecordId'
body_preview:
type:
- string
- 'null'
description: First 280 characters of the body.
direction:
type: string
enum:
- inbound
- outbound
sender_name:
type:
- string
- 'null'
sent_by_me:
type:
- boolean
- 'null'
description: Personal assistant connections only; null for API keys.
attachment_count:
type: integer
created_at:
type: string
format: date-time
awaiting_reply:
type:
- boolean
- 'null'
description: True when the external party sent the last message.
unread:
type:
- boolean
- 'null'
description: The authenticated member's own read state; null for API keys.
inbox_labels:
type: object
additionalProperties:
type: string
description: Only with include_labels=true.
contacts:
type: array
items:
$ref: '#/components/schemas/ContactMatch'
description: Only with include_labels=true and contacts.read.
Models: RecordId, ContactMatch.
Member
type: object
required:
- employee_id
- user_id
- name
- is_me
- inboxes
properties:
employee_id:
$ref: '#/components/schemas/RecordId'
user_id:
type: string
format: uuid
description: The ring-group user ID.
name:
type:
- string
- 'null'
is_me:
type: boolean
inboxes:
type: array
description: Current memberships in accessible inboxes.
items:
type: object
required:
- id
- label
- availability
properties:
id:
$ref: '#/components/schemas/RecordId'
label:
type: string
availability:
type: string
enum:
- available
- unavailable
Models: RecordId.
PhoneNumber
type: object
additionalProperties: false
required:
- id
- phone_number
- label
- description
- inbox_id
- is_primary
- registered
- registration_status
- release_started_at
properties:
id:
$ref: '#/components/schemas/RecordId'
phone_number:
type: string
description: Number as stored in Waveline inventory; legacy values may use local formatting.
label:
type: string
description:
type:
- string
- 'null'
inbox_id:
type:
- string
- 'null'
pattern: ^[1-9][0-9]{0,18}$
is_primary:
type: boolean
registered:
type: boolean
registration_status:
type:
- string
- 'null'
release_started_at:
type:
- string
- 'null'
format: date-time
description: Non-null while a number release is in progress. Never a release token.
Models: RecordId.
CallAnalytics
type: object
required:
- start_date
- end_date
- timezone
- group_by
- inbox_id
- call_type
- counting_unit
- summary
- groups
properties:
start_date:
type: string
format: date-time
end_date:
type: string
format: date-time
timezone:
type: string
const: UTC
group_by:
type: string
enum:
- day
- hour
- inbox
- phone_number
- employee
inbox_id:
type:
- string
- 'null'
call_type:
type: string
const: external
counting_unit:
type: string
const: inbox_interaction
summary:
$ref: '#/components/schemas/CallAnalyticsMetrics'
groups:
type: array
maxItems: 1000
items:
type: object
required:
- key
- label
- metrics
properties:
key:
type:
- string
- 'null'
description: >-
UTC date/hour, inbox/employee ID, or historical called-via number. Null
represents unattributed interactions.
label:
type:
- string
- 'null'
metrics:
$ref: '#/components/schemas/CallAnalyticsMetrics'
comparison:
description: Present only when compare_to is supplied.
type: object
required:
- compare_to
- start_date
- end_date
- summary
- groups
- change
- percent_change
properties:
compare_to:
type: string
const: previous_period
start_date:
type: string
format: date-time
end_date:
type: string
format: date-time
description: Exclusive; equals the report start_date.
summary:
$ref: '#/components/schemas/CallAnalyticsMetrics'
groups:
type: array
maxItems: 1000
description: >-
The previous window grouped the same way. Day and hour keys are that window's
own buckets.
items:
type: object
required:
- key
- label
- metrics
properties:
key:
type:
- string
- 'null'
label:
type:
- string
- 'null'
metrics:
$ref: '#/components/schemas/CallAnalyticsMetrics'
change:
type: object
description: >-
Current summary minus previous summary per metric (answer_rate in percentage
points). Null when either side has no value.
additionalProperties:
type:
- number
- 'null'
percent_change:
type: object
description: >-
Relative change in percent per summary metric, rounded to one decimal. Null when
the previous value is 0 or missing. answer_rate is omitted; use change for its
percentage-point delta.
additionalProperties:
type:
- number
- 'null'
Models: CallAnalyticsMetrics.
CallAnalyticsMetrics
type: object
description: >-
Counts use inbox interactions except unique_calls. Answer rate is the percentage of
direct inbound interactions that reached ringing and were answered. Null rates and
averages mean there are no eligible samples. Durations are seconds; totals sum visible
interaction time.
properties:
unique_calls:
type: integer
minimum: 0
interaction_count:
type: integer
minimum: 0
inbound_interactions:
type: integer
minimum: 0
outbound_interactions:
type: integer
minimum: 0
answered_interactions:
type: integer
minimum: 0
missed_interactions:
type: integer
minimum: 0
abandoned_interactions:
type: integer
minimum: 0
voicemail_interactions:
type: integer
minimum: 0
forwarded_interactions:
type: integer
minimum: 0
transferred_interactions:
type: integer
minimum: 0
transfer_in_interactions:
type: integer
minimum: 0
transfer_in_answered_interactions:
type: integer
minimum: 0
after_hours_interactions:
type: integer
minimum: 0
answer_rate:
type:
- number
- 'null'
minimum: 0
maximum: 100
total_talk_seconds:
type: number
avg_talk_seconds:
type:
- number
- 'null'
avg_time_to_first_ring_seconds:
type:
- number
- 'null'
avg_ring_to_answer_seconds:
type:
- number
- 'null'
avg_entry_to_answer_seconds:
type:
- number
- 'null'
avg_time_to_abandon_seconds:
type:
- number
- 'null'
Inbox
type: object
required:
- id
- label
properties:
id:
$ref: '#/components/schemas/RecordId'
label:
type: string
inbox_type:
type: string
enum:
- personal
- shared
owner_employee_id:
type:
- string
- 'null'
format: uuid
timezone:
type:
- string
- 'null'
description: IANA timezone of the inbox business hours; null when no schedule is configured.
primary_phone_number:
type:
- string
- 'null'
is_member:
type:
- boolean
- 'null'
description: Personal assistant connections only; null for API keys.
is_my_default:
type:
- boolean
- 'null'
description: Personal assistant connections only; null for API keys.
my_availability:
type:
- string
- 'null'
enum:
- available
- unavailable
- null
description: Personal assistant connections only; null for API keys or non-members.
Models: RecordId.
EventType
type: string
enum:
- call.completed
- call.recording.ready
- call.transcript.ready
- call.summary.ready
- message.received
- message.delivered
- message.failed
- contact.created
- contact.updated
EventEnvelope
type: object
required:
- id
- type
- created_at
- connection_id
- data
properties:
origin:
type: object
description: >-
Contact change provenance captured at write time. Absent on older deliveries and
synthetic samples. The envelope connection_id is the destination;
origin.connection_id is the writer.
properties:
type:
type: string
enum:
- integration
- api
- employee
- system
provider:
type: string
example: hubspot
connection_id:
type: string
format: uuid
application_name:
type: string
initial_import:
type: boolean
id:
type: string
description: >-
Logical event ID, stable across delivery retries and replay. Sample IDs begin
sample_.
type:
$ref: '#/components/schemas/EventType'
created_at:
type: string
format: date-time
connection_id:
type: string
format: uuid
data:
oneOf:
- $ref: '#/components/schemas/Contact'
- $ref: '#/components/schemas/Call'
- $ref: '#/components/schemas/Message'
- $ref: '#/components/schemas/RecordingEvent'
Models: EventType, Contact, Call, Message, RecordingEvent.
Subscription
type: object
required:
- id
- connection_id
- target_url
- event_types
- status
properties:
id:
type: string
format: uuid
connection_id:
type: string
format: uuid
target_url:
type: string
format: uri
event_types:
type: array
items:
$ref: '#/components/schemas/EventType'
status:
type: string
enum:
- active
- disabled
- deleted
created_at:
type: string
format: date-time
deleted_at:
type:
- string
- 'null'
format: date-time
activated_at:
type: string
format: date-time
Models: EventType.
Delivery
type: object
required:
- id
- event_id
- subscription_id
- status
- attempt_count
properties:
id:
type: string
format: uuid
event_id:
type: string
format: uuid
subscription_id:
type: string
format: uuid
connection_id:
type: string
format: uuid
event_type:
$ref: '#/components/schemas/EventType'
replay_of:
type:
- string
- 'null'
format: uuid
description: Original delivery ID when this delivery is a manual replay.
status:
type: string
enum:
- pending
- delivering
- delivered
- failed
- canceled
attempt_count:
type: integer
http_status:
type:
- integer
- 'null'
error_code:
type:
- string
- 'null'
created_at:
type: string
format: date-time
delivered_at:
type:
- string
- 'null'
format: date-time
next_attempt_at:
type: string
format: date-time
Models: EventType.
MessageFee
type: object
required:
- amount_cents
- currency
- basis
- status
properties:
amount_cents:
type: integer
const: 1
currency:
type: string
const: usd
basis:
type: string
const: accepted_recipient_send
status:
type: string
enum:
- pending_invoice
- invoiced
MessageSend
type: object
required:
- message
- message_ids
- fee
properties:
message:
$ref: '#/components/schemas/Message'
message_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
fee:
$ref: '#/components/schemas/MessageFee'
Models: Message, RecordId, MessageFee.
Note
type: object
required:
- id
- contact_id
- body
- created_at
- updated_at
- origin_connection_id
- origin_application_name
properties:
id:
$ref: '#/components/schemas/RecordId'
contact_id:
$ref: '#/components/schemas/RecordId'
body:
type: string
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
deleted_at:
type:
- string
- 'null'
origin_connection_id:
type:
- string
- 'null'
format: uuid
origin_application_name:
type:
- string
- 'null'
description: >-
Integration name saved when this note was created; null for employee-created or
legacy notes.
Models: RecordId.
ContactPropertyDefinition
type: object
required:
- id
- key
- label
- data_type
- options
properties:
id:
$ref: '#/components/schemas/RecordId'
key:
type: string
label:
type: string
data_type:
type: string
enum:
- text
- number
- boolean
- date
- url
- email
- phone
- address
- multi_select
options:
type: object
Models: RecordId.
ContactPropertyValue
type: object
required:
- id
- key
- data_type
- value
properties:
id:
$ref: '#/components/schemas/RecordId'
key:
type: string
data_type:
type: string
value: {}
updated_at:
type:
- string
- 'null'
Models: RecordId.
Recording
type: object
required:
- id
- session_call_sid
- recording_type
- duration_seconds
- recorded_at
- created_at
- has_transcript
- has_summary
properties:
id:
$ref: '#/components/schemas/RecordId'
session_call_sid:
type: string
recording_type:
type:
- string
- 'null'
duration_seconds:
type:
- number
- string
- 'null'
recorded_at:
type:
- string
- 'null'
created_at:
type: string
has_transcript:
type: boolean
has_summary:
type: boolean
sentiment:
type:
- string
- 'null'
enum:
- positive
- negative
- neutral
- mixed
- null
sentiment_status:
type:
- string
- 'null'
Models: RecordId.
RecordingEvent
description: >-
Metadata for ready recording, transcript, or summary content. Includes voicemail when
content exists. data.id is the recording ID; call_id is the parent call ID. No media URL
or transcript text is included. Fetch content through the recording endpoints, which
recheck current access.
allOf:
- $ref: '#/components/schemas/Recording'
- type: object
required:
- call_id
- direction
- external_number
- inbox_ids
- has_audio
properties:
call_id:
$ref: '#/components/schemas/RecordId'
direction:
type: string
enum:
- inbound
- outbound
external_number:
type:
- string
- 'null'
inbox_ids:
type: array
items:
$ref: '#/components/schemas/RecordId'
has_audio:
type: boolean
MediaText
type: object
required:
- id
- text
- status
properties:
id:
$ref: '#/components/schemas/RecordId'
text:
type:
- string
- 'null'
status:
type:
- string
- 'null'
Models: RecordId.
MediaDownload
type: object
required:
- download_url
- expires_at
properties:
download_url:
type: string
format: uri
expires_at:
type: string
format: date-time
MessageAttachment
type: object
required:
- id
- file_name
- mime_type
- size_bytes
- created_at
properties:
id:
$ref: '#/components/schemas/RecordId'
file_name:
type:
- string
- 'null'
mime_type:
type:
- string
- 'null'
size_bytes:
type:
- integer
- 'null'
created_at:
type: string
Models: RecordId.
MessageUpload
type: object
required:
- id
- inbox_id
- file_name
- mime_type
- size_bytes
- attachment_id
- expires_at
- status
- upload_path
properties:
id:
type: string
format: uuid
inbox_id:
$ref: '#/components/schemas/RecordId'
file_name:
type: string
mime_type:
type: string
size_bytes:
type: integer
attachment_id:
type:
- string
- 'null'
expires_at:
type: string
status:
type: string
enum:
- awaiting_upload
- ready
upload_path:
type: string
Models: RecordId.