# Changelog

## 2026-08-16 - Added a Passthrough Parameters guide
* Added a [Passthrough Parameters](/passthrough-parameters) guide consolidating every mechanism that sets passthrough parameters on a call, conversation or content analysis, everywhere they are returned, and how the 1000 byte limit is applied

## 2026-08-04 - Added support for routing Twilio calls into Spoke using Application Connect
* Added [Twilio Voice Application Connect](#section/Routing-Twilio-Calls-into-Spoke/Using-Twilio-Application-Connect) as an alternative to Spoke's redirect handler, letting you route a call into Spoke by dialling your organisation's Spoke TwiML application
* Documented `application` as a [`returnTo` destination](#section/Routing-Twilio-Calls-into-Spoke/Returning-unanswered-calls), which returns an unanswered call to a TwiML application of your choice

## 2026-06-29 - Added Teams API endpoints
* Added new API endpoints to list teams and manage teams user memberships
  * [`GET /teams`](/api/teams#list-teams) endpoint to list the teams in your organisation
  * [`DELETE /teams/{teamId}/users/{userId}`](/api/teams#remove-a-user-from-a-team) endpoint to remove a user from a team
  * [`PUT /teams/{teamId}/users/{userId}`](/api/teams#add-a-user-to-a-team) endpoint for adding a user to a team or changing their offer priority

## 2026-06-04 - Added support for analyzing content from aggregated agent scorecards
* Added a new variant of [POST `/contentAnalysis`](/api/content-analysis#create-a-new-content-analysis) request payload to support analyzing aggregated agent scorecards

## 2026-05-19 - Added licenses field to User object
* Added new `licenses` attribute to the `UserWithAvailability` type
  * Applies to [`GET /users`](/api/users#list-users-with-availability), [`GET /users/{id}`](/api/users#get-a-user), [`GET /directory`](/api/directory#list-or-search-the-unified-spoke-directory), [`GET /directory/{entryId}`](/api/directory#get-a-directory-entry), the [`user.availability.updated`](/events/user-events) webhook event, and the [`team.availability.updated`](/events/team-events) webhook event

## 2026-05-14 - Added new Conversation Messages API and deprecated legacy message APIs
* Added new [`POST /conversationMessages`](/api/conversations#send-a-new-conversation-message) endpoint
* Marked [`POST /messages`](/api/conversations#send-a-new-sms-message) and [`POST /teamMessages`](/api/conversations#send-a-new-team-sms-message) endpoints as deprecated
  * These endpoints have been replaced with [`POST /conversationMessages`](/api/conversations#send-a-new-conversation-message) and will be removed in a future version of the API

## 2026-05-11 - Added support for getting a user by email
* Added new optional query parameter `email` to [`GET /users`](/api/users) endpoint

## 2026-04-30 - Added support for controlling user notifications in Conversations APIs
* Added optional `notifyUsers` attribute to:
  * [`POST /messages`](/api/conversations#send-a-new-sms-message) request payload
  * [`POST /teamMessages`](/api/conversations#send-a-new-team-sms-message) request payload
* Added [webhook delivery retry documentation](/webhook-events#delivery-attempts-retries-and-event-ordering), including retryable status codes

## 2026-03-11 - Redirect API now accepts any valid HTTPS URL
* The [Redirect API](/routing-twilio-calls-into-spoke#returning-unanswered-calls) now accepts any valid HTTPS URL as the `returnToId`, when `returnTo` is set to `postEndpoint`

## 2026-02-20 - Added support for Enlighten integration with Insights Data Action
* Added optional `preferences` field to the [`Insights Data Action Response`](/data-actions/insights#insights-response)
  * Controls the preferred Insights context source and Enlighten cards display order
* Added support for group MMS
  * POST [`/teamMessages`](/api/conversations#send-a-new-team-sms-message) endpoint
  * [`Inbound Conversations Data Action Request Payload`](/data-actions/inbound-conversations#request-and-response)

## 2026-01-07 - Added new author, participants and channel attributes to Conversation webhook events
* Added new `participants` and `channel` attributes to `Conversation`
  * These fields are surfaced in:
    * All [conversation webhook events](/events/conversation-events)
    * The [`contact.shared` event](/events/contact-events#contact-shared)
* Added new `author` attribute to each message in `messages` attribute of `Conversation`
  * This is surfaced in all [conversation webhook events](/events/conversation-events)

## 2025-12-18 - Added a new Content Analysis by Call ID endpoint
* Added a new GET [`/calls/{id}/contentAnalysis`](/api/calls#list-a-calls-content-analysis-data) endpoint

## 2025-12-15 - Added a new Content Analysis endpoint
* Added a new GET [`/contentAnalysis`](/api/content-analysis#list-content-analysis-data) endpoint

## 2025-12-01 - Added support for usage information to Content Analysis artifacts
* Added `usage` property to `artifacts` in:
  * The response payload of [`/contentAnalysis/{id}`](/api/content-analysis#get-a-content-analysis)
  * The [`content_analysis.completed` event](/events/content-analysis-events#content-analysis-completed)

## 2025-09-01 - New conversation contact assigned webhook event
* Added support for the new [`conversation.contact_assigned` event](/events/conversation-events#conversation-contact-assigned)

## 2025-07-29 - Added support for setting conversation name in Messages API
* Added support for setting the conversation's name via [`POST /messages`](/api/conversations#send-a-new-sms-message)
* Added `location` to `User` in `Call` and `Conversation` types
* Added `media` to `Message` type in [conversation webhook events](/events/conversation-events)
  * The `media.vendorResourceUrl` is populated for BYOT accounts

## 2025-07-21 - New contact shared webhook event
* Added support for the new [`contact.shared` event](/events/contact-events#contact-shared)
* Marked [`call.contact_assigned_with_add`](/events/call-contact-events#call-contact-assigned-with-add) and [`call.contact_assigned_with_update`](/events/call-contact-events#call-contact-assigned-with-update) events as deprecated
  * These events have been replaced with the `contact.shared`  event and will be removed in a future version of the API

## 2025-07-17 - Added support for deleting a content analysis
* Added a new DELETE [`/contentAnalysis`](/api/content-analysis#delete-a-content-analysis) endpoint

## 2025-07-07 - Added support for recording's transcription model via content analysis APIs
* Added optional `transcriptionModel` attribute to `recordings` of `content` in [POST `/contentAnalysis`](/api/content-analysis#create-a-new-content-analysis) request payload

## 2025-06-30 - Added support for custom analyzer via content analysis APIs
* Added support for custom analyzer attribute when submitting a content analysis request via POST [`/contentAnalysis`](/api/content-analysis#create-a-new-content-analysis) endpoint
* Added `analyzer` attribute to `ContentAnalysis` type

## 2025-06-17 - New content analysis APIs and webhook event
* Added new API endpoints to submit and inspect content analysis requests
  * POST [`/contentAnalysis`](/api/content-analysis#create-a-new-content-analysis) endpoint for submitting a content analysis request
  * GET [`/contentAnalysis/{id}`](/api/content-analysis#get-a-content-analysis) endpoint for getting a content analysis
* Added support for the new [`content_analysis.completed` event](/events/content-analysis-events#content-analysis-completed)

## 2025-05-06 - Added support for creating, reading, updating and deleting personal phonebooks
* Added documentation for [creating or updating a personal phonebook](/api/phonebooks#create-or-update-a-personal-phonebook-with-contacts)
* Updated description for existing `/phonebooks/{id}` and `/phonebooks/{id}/contacts/*` endpoints
  * Added support for using a user's email address as the phonebook `id` parameter to refer to the user's personal phonebook

## 2025-04-14 - Added support for calls with multiple transcripts
* Added support for `call.transcription_completed` event
* Updated the documentation for `text` attribute of `Transcript` type
  * The transcript text may include `LEAVE` and `JOIN` speaker events for call recordings
* Added `vendorCallIds` attribute to `dials` attribute of `parties` in the `Call` type

## 2025-02-12 - Added support for user's manager and sending a team message on behalf of a user
* Added new `manager` field to user fields
  * This field is surfaced in:
    * GET [`/users`](/api/users) endpoint response
    * GET [`/users/{id}`](/api/users#get-a-user) endpoint response
    * GET [`/directory`](/api/directory) endpoint response
    * All [user webhook events](/events/user-events)
    * All [team webhook events](/events/team-events) where the user is a member of the team
    * All [conversation webhook events](/events/conversation-events) where the user is the assigned user for the conversation or the user who sent the message
    * All [call webhook events](/events) where the user is the assigned user for the call
* Added optional `sendAsUser` attribute to `messageContent` in [Send Team SMS message](/api/conversations#send-a-new-team-sms-message) request payload
  * When set, this field allows sending a team message on behalf of a user

## 2025-01-13 - Include passthrough parameters in Call Insights data action requests
* Added passthrough parameters as query string parameters in Call Insights data action requests

## 2024-12-16 - Added support for call recording's transcript
* Added support for `call.transcript.created` event
* Added new `transcript` attribute to call `Recording` type

## 2024-12-09 - New transcript APIs and webhook event
* Added new API endpoints to manage transcripts
  * GET [`/transcripts`](/api/transcripts#list-transcripts) endpoint for list transcripts
  * GET [`/transcripts/{transcriptId}`](/api/transcripts#get-a-transcript) endpoint for getting a transcript
  * DELETE [`/transcripts/{transcriptId}`](/api/transcripts#delete-a-transcript) endpoint for deleting a transcript
  * GET [`/transcripts/{transcriptId}/segments`](/api/transcripts#get-transcript-segments-by-transcript-id) endpoint for getting a transcript's segments
* Added support for the new `transcript.created` event

## 2024-12-03 - Added support for passthrough parameters via Conversation data actions and Conversation APIs
* Added support for passthrough parameters via the `Inbound Conversations` data action
* Added support for passthrough parameters via the `Send a new SMS message` and `Send a new Team SMS message` APIs
* Added support for passthrough parameters in conversation webhook events

## 2024-11-25 - Added support for passthrough parameters via Outbound Call and Team Call data actions and Redirect API
* Added support for passthrough parameters via the `Outbound Call` and `Team Call` data actions
* Added support for passthrough parameters via the Redirect API

## 2024-11-06 - Add support for dial deep link passthrough parameters
* Added support for passthrough parameters via the `dial` deep link route
  * Added instructions in the `dial` documentation
  * Added `passthroughParameters` field to the `Call` type, which applies to the call resource and call webhook event data

## 2024-10-22 - Add support for application deep linking
* Added new `call`, `dial` and `message` deep link routes for the Spoke Phone app
  * `spoke://call/{callId}` - Navigates to the details of the specified call
  * `spoke://call/{callId}/insight` - Navigates to the insight for the specified call
  * `spoke://dial?contactNumber={contactNumber}&callerId={callerId}` - Dials a contact number using a specified caller ID
  * `spoke://message/sms?contactAddress={contactAddress}&companyAddress={companyAddress}&body={body}` - Starts or continues an SMS conversation using the given `companyAddress` as the sender ID and prefills the message input with the provided `body`
  * `spoke://message/whatsapp?contactAddress={contactAddress}&companyAddress={companyAddress}&templateName={templateName}` - Starts or continues a WhatsApp conversation using the given `companyAddress` as the sender ID, prefilled with a message generated from the content template matching `templateName`

## 2024-10-14 - Add support for getting and deleting a specific call recording
* Added new API endpoints to manage call recordings
  * GET [`/call/{callId}/recordings/{recordingId}`](/api/calls#get-a-call-recording) endpoint for getting a call recording
  * DELETE [`/call/{callId}/recordings/{recordingId}`](/api/calls#delete-a-call-recording) endpoint for deleting a call recording
* Added new `id`, `callId` and `fileSize` attributes to call `Recording` type
  * This `id` can be used to delete the call recording via the DELETE endpoint above

## 2024-09-09 - New mimeType and channels attributes for call recordings
* Added new `mimeType` and `channels` attributes to call `Recording` type
* Added new `organisationId` attribute webhook event data
* Added new `spoke.precall` request origin for Call Insights Data Action requests from the Spoke Phone app's incoming calls

## 2024-08-26 - Add support for setting call priority in Team Call Data Action
* Added new optional parameter `priority` to [`Team Call Data Action Response Payload`](/data-actions/team-call#overview)
* Added optional `timezone` attribute to `parties` attribute of `Call` type
  * The attribute will be included only if the party is of type `user`

## 2024-07-25 - New Insights Data Action response payload and request origin
* Introduced new Insights Data Action response payload to support context
  * The old response payload is now **deprecated**. To migrate to the new payload, return the existing payload as `cards` in the new payload.
* Added new `spoke.callhistory` request origin for Call Insights Data Action requests from the Spoke Phone app's call history
* Updated `contactEmail` and `contactId` for Call Insights Data Action request parameters for internal calls to a Spoke user

## 2024-05-14 - Fixed incorrect example
* Fixed incorrect example given for the close timer field. `After 30 days` should be `P30D` not `PT30D`.

## 2024-05-07 - Add support for setting close timer in Messages API and Inbound Conversations Data Action
* Added new optional parameter `closeTimer` to [`/messages`](/api/conversations#send-a-new-sms-message) endpoint
* Added new optional parameter `closeTimer` to [`Inbound Conversations Data Action Response Payload`](/data-actions/inbound-conversations#request-and-response)

## 2024-04-19 - Add support for setting close timer in Team Messages API
* Added new optional parameter `closeTimer` to [`/teamMessages`](/api/conversations#send-a-new-team-sms-message) endpoint

## 2024-02-08 - New Webhook APIs
* Added new APIs to manage webhooks
  * GET [`/webhooks`](/api/webhooks#list-webhooks) endpoint for listing existing webhooks with pagination
  * POST [`/webhooks`](/api/webhooks#create-a-webhook) endpoint for creating a new webhook
  * GET [`/webhooks/{id}`](/api/webhooks#get-webhook) endpoint for getting an existing webhook
  * PUT [`/webhooks/{id}`](/api/webhooks#update-webhook) endpoint for updating an existing webhook
  * DELETE [`/webhooks/{id}`](/api/webhooks#delete-webhook) endpoint for deleting an existing webhook
* Added links to example webhook event payloads under the [Types of Events](/webhook-events) section

## 2024-01-22 - New desktopEnrolledReleaseChannel attributes for user
* Added new `desktopEnrolledReleaseChannel` attribute to `UserWithAvailability` type

## 2023-10-09 - Add WhatsApp Support for Inbound Conversations Data Action
* Added new `whatsApp` channel to Inbound Conversations Data Action request payload
  * `companyAddress` and `contactAddress` are updated to support the new `whatsApp` channel

## 2023-10-03 - New fields for Conversation and Message
* Added new `vendor`, `vendorConversationId`, `initiatedBy`, `companyNumberOwner` and `name` fields to `Conversation` type
  * `initiatedBy` and `companyNumberOwner` fields will only be populated for conversations created after 2 October 2023
* Added new `vendorMessageId` and `isApiCreated` fields to `Message` Type

## 2023-09-25 - Add support for setting conversation claim rule with Inbound Conversation Data Action
* Added new `claimRule` to Inbound Conversations Data Action response payload

## 2023-09-20 - New Team Messages API
* Added new POST `/teamMessages` API to send messages on behalf of team using team assigned DDI

## 2023-07-06 - New loginStatus and isDirectorySynced attributes for user
* Added new `loginStatus` and `isDirectorySynced` attributes to `UserWithAvailability` type

## 2023-06-26 - New Inbound Conversations Data Action
* Added documentation for the Inbound Conversations Data Action functionality
* Changed `Call Group` to `Team` inline with changes to Spoke admin and application user interfaces

## 2023-04-11 - Fixed unanswered calls not returned from Redirect API on missed cold transfers
* Fixed unanswered cold transfers not being returned when `returnTo` and `returnToId` parameters are provided
  * See [Returning unanswered calls](/routing-twilio-calls-into-spoke#returning-unanswered-calls)

## 2023-03-13 - Override call group display name via Call Group Data Action
* Added support for override call group display name via Call Group Data Action
* Added optional `overriddenDisplayName` attribute to `assignedCallGroup` and `directoryTarget` attributes of `Call` type
  * The attribute will be included only if the `team`'s the display name is overridden via Call Group Data Action

## 2023-03-02 - Updated Outbound Call Data Action for calls made by SIP devices
* Added optional device parameters `deviceId`, `deviceAddress` and `deviceExtension` to Outbound Call Data Action request parameters
  * The device parameters will only be included if call is placed by a standalone SIP device
* Added support for blocking outbound calls placed by standalone SIP devices via Outbound Call Data Action
  * This overrides the flag set against the SIP device "Outbound calls allowed"

## 2023-02-21 - New isHidden status for team
* Added new optional query parameter `includeHiddenCallGroups` to [`/directory`](/api/directory) endpoint
  * If `true`, return all directory entries, including hidden call groups.
  * By default, this flag is false and hidden call groups are excluded from the response
* Added new `isHidden` attribute to `TeamWithAvailability` type

## 2023-01-23 - New Assigned Call Group attribute on Call and Call Group Data Action Request
* Added new `assignedCallGroup` attribute to `Call` type
  * This attribute is only populated for inbound calls, and identifies the last team directory entry a call was for.
  * Use this attribute to identify calls to a given team.
  * The attribute contains a trimmed version of the directory entry, containing `id`, `displayName`, `type`, and `extension`
* __IMPORTANT CHANGE__
  * The `directoryTarget` field on the `CallGroupDataActionRequestPayload` object has been deprecated in favour of `assignedCallGroup`.
  * The field will be removed completely in a future release. Please migrate to the new field.

## 2023-01-11 - New Call Group Data Action and Call Attributes for Analytics & Reporting
* Added documentation for the Call Group Data Action functionality
* Added new `extension`, `email` and `dials` attributes to each party in `parties` attribute of `Call` type
  * The `dials` contains a list of dial attempts to the call party with a reason for each dial
* Added new `joinedAt` and `leftAt`  attributes to each connection in `connections` attribute of `Call` type

## 2022-10-25 - New Insights Data Action
* Added documentation for the new Data Action functionality
* Moved original Data Actions menu into its own section

## 2022-09-28 - Override call timeouts
* Added support for overriding call timeouts using `twimlRedirectUrl`

## 2022-06-20 - New blocked call status and Data Action documentation
* Added new `blocked` call status and `blocked` outcome to `Call` type
  * This status is currently for outbound calls only.
  * The `reason` attribute on the `blocked` outcome identifies the reason the call was blocked.
    E.g. the reason is set to `dataAction` when the outbound call was blocked by Outbound Call Data Action.
* Added documentation for the new Data Action functionality

## 2022-06-02 - New Outcome and Tariff attributes on Call
* Added new `outcome` attribute to `Call` type
  * This attribute is populated for all calls, and identifies the final outcome of a call
  * For inbound calls, the attribute has an optional `reason` field, which identifies the reason
    a call was abandoned or missed.
* Added new `tariff` attribute to `Call` type, and new `call.tariffed` event
  * This attribute is populated after the call has been tariffed.
  * Once tariffed, a `call.tariffed` event is emitted
  * The tariff is calculated for each connected call party on the call, based on the connection's route,
    duration and per-minute price
  * This field will only be populated for Spoke accounts that have the "Include Tariff in Call API" add-on
    enabled in their account. Contact your Spoke Account Manager to have this add-on enabled.

## 2022-05-04 - New suspended status for user
* Added new optional query parameter `includeSuspendedUsers` to [`/directory`](/api/directory) endpoint
  * If `true`, return all directory entries, including suspended users.
  * By default, this flag is false and suspended users are excluded from the response
* `UserWithAvailability.status` is now one of invited, active or suspended

## 2022-04-11 - New Call Attributes for Analytics & Reporting
* Added new `directoryTarget` attribute to `Call` type
  * This attribute is only populated for inbound calls, and identifies the initial directory entry a call was for.
  * Use this attribute to identify calls to a given team, user or other directory entry.
  * Webhook call events will include this attribute after the call has been processed by the Spoke telephony service.
    This means the earliest events in the call lifecycle to include this attribute will be `call.answered` / `call.not_answered`
  * The attribute contains a trimmed version of the directory entry, containing `id`, `displayName`, `type`, `extension` and `email`
* Added new `waitTime` and `waitTimeText` attributes to `Call` type
  * For an answered call, the `waitTime` is calculated as the millisecond difference between `startedAt` and `answeredAt` fields.
  * For an unanswered call, the `waitTime` is equivalent to the value of `duration`.
  * The `waitTimeText` field is a human readable version of the `waitTime` field, similar to `durationText`
* Added GET [`/directory/{entryId}`](/api/directory#paths-1directory-1-entryid-get) endpoint.
  * Retrieves specified entry from the directory

## 2022-03-17 - New GET endpoint on /phonebooks
* Added GET [`/phonebooks/{id}/contacts/{contactId}`](/api/contacts#paths-1phonebooks-1-id-1contacts-1-contactid-get) endpoint.
  * Retrieves specified contact from an existing phonebook

## 2022-02-02
* Added new `excludeEmpty` query parameter to the  GET [`/phonebooks`](/api/phonebooks) endpoint.
  * Set this to true to exclude phonebooks that do not contain any contacts.
* Added support for optional `sortOrder` and `contactNumber` query parameters to GET [`/calls`](/api/calls) endpoint.

## 2021-12-15 - New Call Events and Send to Voicemail Support
* Added support for `call.started`, `call.answered`, `call.not_answered`, `call.hungup` event
* Added support for sending a call directly to voicemail using `twimlRedirectUrl`

## 2021-11-24 - New vendor and vendorCallId fields
* Added new `vendor` and `vendorCallId` fields to `UserWithAvailability` and `Call` types
  * These fields include the vendor who carried the call and the vendor's call ID
  * In the case of Twilio, `vendorCallId` contains the `callSid` of the parent call
  * For the `UserWithAvailability` type, these fields will be populated (along with `callId`)
    when the user's availability `status` is `busy` and `notAvailableRule` is `busyOnACall`

## 2021-11-23 - User & Team Availability Webhook Events
* Added support for `user.availability.updated` event
* Added support for `team.availability.updated` event

## 2021-11-03
* Added new `sipAddress` field to Device object for [`/directory`](/api/directory) endpoint

## 2021-10-20
* Added new fields to `trunkUsers`, `trunkDevices` and `trunkQueues` which are returned by [`/trunks`](/api/trunks) and [`/directory`](/api/directory)
  * `displayName` - Display name of the directory entry
  * `type` - Directory type
  * `twimlRedirectUrl` - Redirecting an inbound Twilio call to this target url will transfer the call to this entry

## 2021-10-11 - Added trunk entities to /directory endpoint
* Added `trunkUsers`, `trunkDevices` and `trunkQueues` to the list of entries returned by [`/directory`](/api/directory) endpoint

## 2021-10-05 - Updated mobile field of User and UserWithAvailability objects
* Updated `mobile` field of User and UserWithAvailability objects
  * This field will now be omitted if the organisation is configured to exclude employee phone numbers from Spoke APIs

## 2021-09-30 - Added twimlRedirectUrl field to objects for /directory and /users endpoint
* Added new `twimlRedirectUrl` field to TeamWithAvailability, UserWithAvailability and Device object for
  * [`/directory`](/api/directory) endpoint
  * [`/users`](/api/users) endpoint

## 2021-09-27 - New /directory endpoint
* Added [`/directory`](/api/directory) endpoint. Lists or finds directory entries. Supports optional search parameters.
  * Lists all directory entries in the organisation. This list is equivalent to the list in Spoke application "Internal" directory view. Currently the list includes `users`, `teams` and `devices`.  Future revisions will include `trunkUsers`, `trunkDevices` and `trunkQueues`
  * Optional query parameters to search the directory by `extension`, `ivrKey` or `phoneNumber`
* Added new fields to [`/users`](/api/users) endpoint:
  * `phoneNumbers` - List of phone numbers of the user
  * `displayName` - Display name of the user
  * `type` - Directory type
  * `availability.availabilitySummary` - Describes the current availability of the user

## 2021-05-31 - Send SMS Messages
* Added support for sending SMS Messages on behalf of a Spoke user:
  * The Spoke user must have an SMS enabled DDI
  * The `from` parameter allows you to specify either the user's SMS enabled DDI or their email address
  * The message will be added to a conversation (if one exists with the customer) or a new conversation will be automatically created
  * The message will appear in the user's conversations view in the Spoke application
  * The `conversation.message.created` event will be fired when the message is created.

## 2021-03-22 - Conversation Webhook Events
* Added support for Conversation events
  * `conversation.inactive`
  * `conversation.closed`
  * `conversation.message.created`

## 2020-09-08 - New Webhooks support
* You can now create webhooks in your Spoke organisation, allowing you to listen to events as they occur within the Spoke platform. Webhooks are particularly useful for listening to call events, updating, and reacting to these in your system in near real-time.

## 2020-08-05 - Added ability to assign Trunk Users & Phone Numbers to Spoke Users
* You can now assign trunk users and phone numbers to Spoke users when creating or updating trunk users via the [`/trunks/{trunkId}/trunkUsers/*`](/api/trunk-users) endpoint.

## 2020-07-24 - New OAuth 2.0 content type support
* The content type for generating OAuth 2.0 access tokens using the `client_credentials` grant type now supports `application/x-www-form-urlencoded`,
  this is better aligned with RFC6749 which outlines how OAuth 2.0 tokens should be generated. The previous `application/json` format is now **deprecated**.

## 2020-07-17 - Added missing fields for Phonebook, Contact, Trunk Device, Trunk Queue and Trunk User to documentation
* Requests for PUT [`/phonebooks`](/api/phonebooks) endpoints can include additional nullable fields in the body: `countryIso`
* Requests for PUT [`/phonebooks`](/api/phonebooks) and [`/contacts`](/api/contacts) endpoints with contact can include additional nullable fields in the body: `firstName`, `lastName` and `jobTitle`
* Requests for PUT/POST [`/trunks/{trunkId}/trunkDevices/*`](/api/trunk-devices) endpoints can include additional nullable fields in the body: `description`, `location`, `model` and `product`
* Requests for PUT/POST [`/trunks/{trunkId}/trunkQueues/*`](/api/trunk-queues) endpoints can include additional nullable fields in the body: `description`
* Requests for PUT/POST [`/trunks/{trunkId}/trunkUsers/*`](/api/trunk-users) endpoints can include additional nullable fields in the body: `department`, `description`, `jobTitle`, `location` and `manager`

## 2020-07-07 - Unified Directory: Support for managing SIP trunk directory entries
* You can now manage SIP devices, users and queues associated with your SIP Trunks.  Any devices, users or queues created via this API
  will appear in the Internal company directory in the Spoke application. These endpoints are directly dialable from Spoke, and can optionally
  be associated with a Spoke User, providing full integration between Spoke and your legacy PBX.

  By integrating with the Unified Directory you can automate the process of synchronising the entries in your legacy phone system with Spoke.  Platform
  specific integrations (e.g. Cisco UCM) will be available from Spoke Integration Partners, or you can use the following API endpoints directly:
  * Added [`/trunks`](/api/trunks) endpoint. Lists all SIP Trunks in the organisation. Trunks must be created via the Spoke account portal and will required additional network configuration.
  * Added [`/trunks/{trunkId}/trunkDevices/*`](/api/trunk-devices) endpoints, with ability to list, add, update and delete Trunk Devices. Trunk devices usually represent real phones in communal areas, such as a conference phone or lunch room phone.
  * Added [`/trunks/{trunkId}/trunkUsers/*`](/api/trunk-users) endpoints, with ability to list, add, update and delete Trunk Users. Trunk users usually represent the individual users in your phone system who may have soft phones or desk phones.
  * Added [`/trunks/{trunkId}/trunkQueues/*`](/api/trunk-queues) endpoints, with ability to list, add, update and delete Trunk Queues. Trunk queues usually represent call queues or hunt groups in your phone system.

## 2019-11-26 - New /users endpoint
* Added [`/users`](/api/users) endpoint. Lists all Spoke users in the organisation.  This list is equivalent to the list of Users in Spoke application "Internal" directory view.
  * The list includes each user's availability
  * The availability state for a given user is close to real time (lag 1-5 seconds).
  * Details about Availability statuses and reason fields are included in the API response.
* Current limitations
  * This endpoint currently supports `GET /users` and `GET /users/{id}`. Future versions may support `PUT` methods to enable external control of availability
  * The following properties will be exposed in a future version of this API : `extensions`, `phone_numbers`, `teams`

## 2019-11-12 - Added extra fields to Call object to simplify CRM integration
* Responses from the [`/calls`](/api/calls) endpoints now include additional fields:
  * `isInternal`: If this field is true then the call was between internal Spoke Users only.
  * `contactNumber`: This is the phone number of the external party to the call, irrespective of the `callDirection` value.  This field can be used to identify a matching customer record in an external system if required.
  * `companyNumber`: This is the phone number of the company used for the call, and will either be the number the external party called for inbound calls, or the caller id for outbound calls.
* Added new `CallSummary` type which provides a set of narrative summary fields about the call, suitable for populating a call note record in an external CRM system. This object includes the following fields, and is exposed as the `summary` field under the `Call` object:
  * `header`: A Short header summarising the call content. This is dependent on call direction, and what is known about the caller and callee.
  * `contactNumberDescription`: A short description of the `contactNumber` (e.g "Called in from +64218880000").
  * `companyNumberDescription`: A short description of the `companyNumber` (e.g. "Call in to +6498880000").
  * `outcome`: A short description of the outcome of the call.  This includes who answered the call, whether it was transferred and the duration of the call. (e.g. "Answered by Joseph Brealey. Transferred to Joanna Brown. Spoke for 3 minutes")
* __IMPORTANT CHANGE__
  * The `initiator` and `recipient` fields on the `Call` object have been deprecated in favour of `contactNumber` and `companyNumber`.
  * This change should simplify integrations with external CRM systems as contactNumber will always represent the phone number of the external call party.
  * These fields will be removed completely in a future release. Please migrate to the new fields.

## 2019-10-08 - Added Notes to Call object
* Responses from the [`/calls`](/api/calls) endpoints now include a `notes` type.
  * Notes can be recorded at any time after the call ends
  * A call can have multiple sets of notes recorded against it
* Added a section in the API guide relating to [date/time and timestamp](/api-guide#datetime-values) fields.

## 2019-09-30 - New /calls endpoint
* Added [`/calls`](/api/calls) endpoint:
  * Provides the ability to retrieve calls that have been received or made by the organisation
  * Calls can be queried by time range (`before`, `since` parameters) and/or last modified timestamp (`modified` parameter).
  * Only returns calls that have ended (where all parties have hung up), in-flight calls are not included in the response at this time
* __IMPORTANT CHANGE__
  * Deprecated singular endpoints (`/phonebook` & `/phonebook/{id}/contact`) in favour of plural endpoints.
  * All future collection endpoints will be plural in form ([`/phonebooks`](/api/phonebooks), [`/phonebooks/{id}`](/api/phonebooks#paths-1phonebooks-1-id-get), [`/calls`](/api/calls#paths-1calls-get))
  * The current singular endpoints continue to function but will be removed in a future release.  Please migrate to the new endpoints.
  * The deprecated endpoints are marked in the Deprecated section of this document
* __BREAKING CHANGE__
  * Replaced `nextContact` query string parameter with `next` parameter as the standard parameter for response result set paging across all endpoints

## 2019-07-31 - Initial Release
* Provides the ability to synchronise company contacts (customers, suppliers) into Spoke's external phonebook. We use this phonebook to identify incoming callers and to allow Spoke users to search and place calls. This has been modelled as follows:
  * A Phonebook is a collection of Contact(s), where a Contact is a record containing a name/phone number(s)/email addresses.
  * You can batch upload to a Phonebook (which replaces the entire contents) or upsert a single Contact into a Phonebook.
  * We support multiple external phonebooks, this allows our customers some flexibility, primarily if they are using our CSV upload functionality and have data.
* Supports authentication via OAuth 2.0 Client Credentials Flow
