{"openapi":"3.1.1","info":{"version":"2026-07-01","description":"# Introduction\nWelcome to the Spoke Developer API. This API allows you to connect [Spoke Phone](https://getspoke.com/products/spoke-phone) and [Spoke Enlighten](https://getspoke.com/products/spoke-enlighten) to your existing business systems in a variety of ways:\n\n- Access the Spoke Unified Directory via the [Directory](#tag/Directory) endpoint. This endpoint provides comprehensive details about each Directory entry, including Availability. You can read more about the Spoke Directory and its core concepts [here](#section/Core-Concepts)\n- Upload customer, supplier and other CRM contacts into Spoke Phone via the [Phonebooks](#tag/Phonebooks) and [Contacts](#tag/Contacts) endpoint.  Once integrated, these contacts become searchable in the Spoke mobile application external phonebook. Any new incoming calls from phone numbers that have matching details in the phonebook will automatically show enhanced caller ID details.\n- Access detailed call logs via the [Calls](#tag/Calls) endpoint.  You can extract this data for reporting, real-time analytics or even integrate them back into customer records in your CRM system.\n- View Spoke User status via the [Users](#tag/Users) endpoint, and build a custom dashboard to see who is available in real-time.\n- Add SIP trunk extensions to the Spoke Unified Directory by managing your Spoke SIP Trunk integration via the [Trunks](#tag/Trunks) endpoint. Integrating with this endpoint and its associated [Trunk Devices](#tag/Trunk-Devices), [Trunk Users](#tag/Trunk-Users) and [Trunk Queues](#tag/Trunk-Queues) endpoints allows you to synchronise your legacy internal phone directory with Spoke, giving your Spoke users a unified view across your entire organisation.\n- Subscribe to webhook events so that your systems can be notified when call and conversation related events occur on the Spoke platform.\n- Send system generated SMS messages via the [Conversations](#tag/Conversations) `/conversationMessages` endpoint. The messages will be automatically added to the user's conversations in the Spoke application.\n- Create [Data Actions](#tag/Data-Action-Concepts) to customise your call workflows\n- Automatically analyse calls and conversations using the Spoke Enlighten AI [Content Analysis](#tag/Content-Analysis) `/contentAnalysis` endpoint.\n\n## Access to the API\nIf you have a Spoke account, you can access the Spoke Developer API via `https://integration.spokephone.com`. This production endpoint provides access to your live user data.\n\nIf you do not have a Spoke account, you have two options:\n\n- If you have your own Twilio account and want to deploy Spoke into that account, enabling you to integrate Spoke with other Twilio applications, go to https://account.spokephone.com/twilio to create a free developer account.\n- If you want use Spoke's services without needing your own Twilio account, go to https://account.spokephone.com/signup to sign up for trial account.\n\nEither account will allow you to get started and provides access to full production functionality.\n\n## Feedback\nIf you have requests, feedback or questions, please request to join the Spoke Phone Tech Community on Slack at https://spoke-phone-tech.slack.com\n\n# Authentication\n\nThe Spoke API uses *OAuth v2.0 client credentials flow* to authenticate requests. You can manage your API access in the Spoke Account Portal at https://account.spokephone.com/login\n\nTo authenticate with the Spoke API you need to follow these steps:\n\n1. Create an API key\n2. Generate an Access Token\n3. Make Authenticated Requests\n\nFor more details on the OAuth 2.0 client credentials flow, see the overview at https://auth0.com/docs/flows/concepts/client-credentials\n\n## Create an API key\n\nYou must first login as an Administrator to your account in the Spoke Phone Account Portal at https://account.spokephone.com/login. Open the settings page, click `Other`, `Developers`, and add a new `API key`. This is a one time operation.\n\n<img alt=\"Developer API Screenshot\" src=\"./img/developer_api_screen.png\" width=\"50%\" />\n\nOnce the \"API key\" is created, you will be provided with the necessary details (`OAuth 2.0 Client ID`, `OAuth 2.0 client secret`, `Authentication service URL`) needed to create an access token.\n\n## Generate a Token\n\nOnce you have created an \"API key\", the next step is to obtain a bearer token from the Spoke Phone Auth Service at `https://auth.spokephone.com/oauth/token`.  This step requires making an HTTP POST to the Authorization Service URL provided in the step above, with the request body containing an `application/x-www-form-urlencoded` string with the following fields:\n\n| Field Name | Description |\n| --- | --- |\n| `client_id` | The client id from the Developer API |\n| `client_secret` | The client secret from the Developer API |\n| `grant_type` | Always `client_credentials` |\n\nA javascript example of this is below:\n\n```javascript\nconst response = await fetch(\"https://auth.spokephone.com/oauth/token\", {\n  method: 'post',\n  body: querystring.stringify({\n    client_id: \"{CLIENT_ID_FROM_DEVELOPER_API}\",\n    client_secret: \"{CLIENT_SECRET_FROM_DEVELOPER_API}\",\n    grant_type: \"client_credentials\"\n  }),\n  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n});\n\nconst { access_token } = response.json();\n```\n\n> Note: The auth token endpoint still supports sending an `application/json` body, however this content type is deprecated in favour of `application/x-www-form-urlencoded`.\n\n## Make Authenticated Requests\n\nTo make authenticated API requests, you must provide a valid bearer token in an HTTP Header:\n\n`Authorization: Bearer {access_token}`\n\nOnce you have obtained an access token, you must provide this as a Bearer token for all subsequent API requests.\n\n```javascript\nconst response = await fetch(\"https://integration.spokephone.com/phonebooks\", {\n  method: \"get\",\n  headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${access_token}` },\n});\n```\n\n## Access Token Expiration\nAccess tokens expire after `3600` seconds (1 hour).  It is up to the developer to implement appropriate refresh logic, by following the same token generation process above.  Note that as flow is a client credentials flow, intended for machine to machine operations, we do not provide a token refresh endpoint. Instead, requesting a new access token using the same client_id/client_secret is sufficient.\n\n# API Guide\n\n## Requests and Responses\nThe API is RESTful. All requests should be made over HTTPS, and accessed from `https://integration.spokephone.com`.\n\n### Requests\nMost of the parameters and request data will be contained in the body of the HTTP request.  The Spoke Phone API accepts JSON in the HTTP request body. No other data format (e.g. XML) is supported.\n\n### Responses\nThe success or failure of an HTTP request is returned as a standard HTTP status code:\n\n* a `2xx` code for success\n* a `4xx` or `5xx` code for failure\n\nThe response body will always be encoded in JSON format.  No other data format (e.g. XML) is supported.\n\n## Pagination\nThe Spoke Phone API uses a cursor based model for paging of large result sets.\nPaging support is available for the following endpoints:\n\n* `GET /phonebooks`\n* `GET /phonebooks/{id}/contacts`\n* `GET /calls`\n* `GET /trunks`\n* `GET /trunks/{trunkId}/trunkDevices`\n* `GET /trunks/{trunkId}/trunkQueues`\n* `GET /trunks/{trunkId}/trunkUsers`\n\nAll of these endpoints support an optional `limit` parameter.  If this parameter is omitted, the default limit is `100`.  The maximum limit is `1000` for any single request. You can retrieve a list of phonebooks without retrieving associated contacts with `GET /phonebooks?limit=0`\n\n> Example\n```http\nGET https://integration.spokephone.com/calls?limit=2 HTTP/1.1\nHost: integration.spokephone.com\n```\n> 200 Response\n```json\n{\n    \"meta\": {\n        \"next\": \"eyJsYXN0TW9kaWZpZWRUaW1lc3RhbXAiOjE1Njg2NzUzOTE3NTIsImNhbGxJZCI6ImE2YzVkMDgwLWQ0MWUtMTFlOS1hYzZiLWE5MTliMjAwYWFlNCIsIm9yZ2FuaXNhdGlvbklkIjoiOTQ4NzhhYzEtMDI3OS0xMWU5LWI0ZmEtNmJiYzgxMGEzZjJkIn0=\"\n    },\n    \"calls\": [ { ... }, { ... } ]\n}\n```\n\nEndpoints that support paging return a `meta` field in the response object, which includes a `next` token to be used in subsequent requests.\n\nSimply pass the `next` token in the query string of the next `GET` to retrieve the next page of results.\n\nIf there are no additional pages the `next` field will be empty.\n\n\n## Batch Operations\nBatch operations such as uploading a list of contacts requires replacing the entire contents of a given Phonebook. Additional batch upload support may be introduced in the future.\n\n## Upload Limits\nIndividual PUTS and POSTS are limited to 6MB total (JSON encoded) data size. If a given Phonebook contains more than 6MB of data then it should be split into separate phonebooks, until such time that we introduce batch upload paging.\n\n## Last Modified Timestamp\nThe `GET /calls` endpoint supports paging by last modified timestamp.  This is because a call can have additional notes stored against it well after the call ends, and there is a small amount of latency between the call end and any recordings becoming available.  The last modified timestamp will be updated whenever any additional data is stored against the call.\n\nCalling a `GET /calls?modified={timestamp}` will retrieve all calls created or modified since the provided timestamp. This means that the API may return a `Call` that was returned in response to a previous request. It is the responsibility of the client application to reconcile the response content and upsert the retrieved calls as appropriate.\n\nThe timestamp value is a a numeric timestamp in milliseconds since the Unix epoch.\n\n## Date/Time Values\nIn general for any date/time or timestamp types, this API will provide two fields:\n\n1. `{fieldName}At`: This is an ISO8601 formatted date/time.  All date/times are UTC.\n2. `{fieldName}Timestamp`:  This is a numeric timestamp in milliseconds since the Unix epoch.\n\n## Postman Collection\nDownload Postman Collection: <a href=\"https://developer.spokephone.com/postman-collection.json\" class=\"postman-download\">Download</a>\n\nTo use the postman collection you will need to have authentication credentials, which can be obtained in the `Developer` section of the Spoke Phone Account Portal (see [Create an API key](#section/Authentication/Create-a-Developer-API-integration) for more details on how to create API authentication credentials).\n\nWe recommend setting up the following variables in a postman environment `clientId`, `clientSecret`, `tokenUrl`, and `baseUrl`. To authenticate every request for the postman collection for an hour (the lifetime of an authentication token), you will need to edit the collection `Authorization` to use OAuth 2.0 with client credentials. Once you have completed this setup you will be able to make any request in the collection, and be authenticated to do so.\n\n<div>\n    <img alt=\"Developer API Screenshot\" src=\"./img/postman-auth.png\"\n        width=\"45%\" style=\"float: left; padding: 5px\" />\n    <img alt=\"Developer API Screenshot\" src=\"./img/postman-env.png\"\n        width=\"45%\" style=\"padding: 5px\" />\n</div>\n\n# Core Concepts\n\n## The Spoke Directory\n\nEach item in the Spoke directory is called a directory entry. Spoke's core directory entry types are `userWithAvailability`, `teamWithAvailability` and `device`. If you have enabled our PBX augmentation feature, then a Directory can also contain `trunkUser`, `trunkDevice` and `trunkGroup` types - these are equivalent to the `device` type with some additional attributes for display and search purposes.\n\n### Devices\nIn Spoke, you can add a SIP Device as a standalone `Device`, and it will appear as an entry in a Spoke directory. In Spoke, a SIP Device only provides basic dialtone and call audio functionality. Rich functionality is available through Spoke's desktop and mobile softphone applications, and we recommend SIP devices are only used for common area or conference room phones.\n\n> Note: Spoke does not currently support adding a Twilio client as a standalone entry in the Spoke directory.  Instead, Twilio clients\n> are automatically created when you add a Spoke user and they sign in using the Spoke mobile or desktop applications.\n\n### Users\nIn Spoke, a `User` can have multiple callable endpoints, for example:\n\n* a Mobile phone running the Spoke mobile application for iOS or Android\n* a Desktop PC running the Spoke desktop application for MacOS or Android\n* a SIP Device registered to the Twilio SIP Registrar or to a third party PBX interconnected via a SIP Trunk\n\nWhen a call arrives on Spoke for a given `User`, Spoke will dial all endpoints associated with that `User`.  The endpoint that is answered wins and Spoke automatically stops ringing the user's other endpoints.  Additionally, the user can transparently move the call from one endpoint to another, enabling them to answer a call at their desk and continue it on their mobile phone when leaving the office.\n\n### Call Groups/Teams\nA `Team` (or Call Group) in Spoke is analogous to a hunt group in traditional PBX systems.  A `Team` consists of one or more `User` or `Device` members, and has business rules that define how a call is routed to those members, as well as what happens when the call goes unanswered.  When a call arrives on Spoke for a `Team`, Spoke will automatically create a call offer flow that dials the members of the team based on those pre-defined rules. For `User` team members, the same dial rules apply, which means that when the call is offered to the `User`, all of the user's endpoints are dialled at once.\n\n## Company Contacts in Spoke\nCompany Contacts are external contacts that are managed via the [Phonebooks](#tag/Phonebooks) and [Contacts](#tag/Contacts) endpoints.\n\nSpoke supports two types of phonebooks:\n\n* `Company Contacts (Shared)`: Contacts in shared phonebooks are searchable and visible to all users of the Spoke application.\n* `Company Contacts (Assigned)`: Contacts in assigned phonebooks are searchable and visible only to the user who is assigned that phonebook.\n\nAll Company Contacts are searchable and visible in the Spoke application under the 'External' tab. They are not editable by end-users and must be managed through the Spoke API.\n\n### Company Contacts (Shared)\nShared company contacts are used where you do not need to restrict which users can access a contact.\n\nYou can create and manage multiple `Shared` phonebooks, these are searchable and visible to all users.\n\n### Company Contacts (Assigned)\nEach Spoke User also has a phonebook that contains company contacts that only they can see or search.  This is useful for use cases where you need to restrict which contacts a user has access to.\n\nYou manage a user's phonebook via the [creating or updating a personal phonebook](#tag/Phonebooks/operation/phonebookPutByEmail) endpoint, using the user's email address as follows:\n\n  ```http\n  PUT https://integration.spokephone.com/phonebooks/email@example.com\n  ```\n\n## Extensions\n\nEvery entry in the Spoke directory is assigned an extension number.\n\nExtensions are the primary mechanism for connecting calls that have already been answered by another Twilio application (such as Studio) to entries in the Spoke Directory.  We do not, however, use extensions for internal call routing.\n\nExtensions are created and managed through the Spoke account portal, and can be assigned to any `Device`, `Team` or `User` in your account. Extensions are unique, and there is a one to one mapping between extension and directory entry.\n\n## Calls on Spoke\n\nAll Spoke calls involve a conference bridge; this allows us to support warm transfer, multi-party calls, recording and other functionality.\n\nThis means that when a call arrives on the Spoke platform, the incoming call is placed into a conference via `<Dial><Conference>...` TwiML. We then use Twilio's Create Call REST API to dial all endpoints based on the target of the incoming call (a `Device`, `Team` or `User` as described above). When the call is answered by one of the endpoints, all other calls are cancelled, and the \"winning\" call is placed into the same conference.\n\n# Routing Twilio Calls into Spoke\n\nWhen you activate a phone number from your Twilio account on Spoke, the Spoke platform automatically attaches Spoke's standard inbound TwiML application to the phone number. From that point forward, all routing and call handling is taken care of by Spoke.\n\nIf you want greater control over a call, including the ability to send a call to Spoke and have Spoke send the call back to your application if the call goes unanswered, then we recommend using Spoke's redirect handler.\n\nThe Spoke redirect handler enables you to programmatically connect incoming calls that have been processed with other Twilio applications (such as Studio, Flex or your own application) to Spoke.\n\nThe redirect handler url has the following form:\n\n```\nhttps://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={YOUR_ORGANISATION_ID}\n```\n\nThe handler accepts the following parameters:\n\n> Note: **The parameter order listed below is important** as all requests to the handler are signature validated.\n\n| # | Parameter                  | Required | Description                                                                                                                          |\n|---|----------------------------|----------|--------------------------------------------------------------------------------------------------------------------------------------|\n| 1 | `extension`                | Yes      | The extension you are redirecting the call to                                                                                        |\n| 2 | `nextOfferTimeout`         | No       | The number of seconds to wait before offering the call to the next available user(s) in a call group, see the supported range below. |\n| 3 | `organisationId`           | Yes      | Your unique Spoke account identifier                                                                                                 |\n| 4 | `priority`                 | No       | The priority of the call, see the supported range below.                                                                             |\n| 5 | `returnTo`                 | No       | One of `flow` or `taskQueue` or `postEndpoint`.                                                                                      |\n| 6 | `returnToId`               | No       | The identifier of the `returnTo` destination, see the expected value below.                                                          |\n| 7 | `sendToVoicemail`          | No       | If `true`, force the call to be sent to voicemail                                                                                    |\n| 8 | `timeout`                  | No       | The number of seconds to wait for a user or anyone in a call group to answer, see the supported range below.                         |\n| 9 | `x-<passthroughParameter>` | No       | Passthrough parameter to store against the call. See below for more details on how to set passthrough parameters.                    |\n\n> Note: The Spoke Directory API provides a pre-formed `twimlRedirectUrl` for each directory entry that includes the correct `extension` and `organisationId` parameters.\n\nTo connect an incoming Twilio call with a Spoke directory entry, simply update the call using Twilio's REST API as follows:\n\n```javascript\nconst client = require('twilio')();\n\nclient.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')\n  .update({\n    method: 'POST',\n    url: 'https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}'\n  });\n```\n\nThis will connect the incoming call to Spoke and follow the dial rules outlined in the `Spoke Directory` section above.\n\n## Using Spoke's Redirect Handler\n\nIf `sendToVoicemail` is `true`, then Spoke will send the call to the target extension's voicemail, *if* that extension is a type that supports\nvoicemail. Once the customer leaves a voicemail, the call ends. `User` and `Team` extensions will always have a voicemail, however other directory entry types do not currently support voicemail.  In the case of extensions that do not support voicemail, there are two possible scenarios:\n\n* If `returnTo`/`returnToId` are provided, then the call will be returned to the target defined by `returnToId` as described in the section [Returning unanswered calls](#section/Routing-Twilio-Calls-into-Spoke/Returning-unanswered-calls) below\n* If `returnTo`/`returnToId` are *not* provided, the call will silently end. Due to this behaviour, we recommend that `returnTo` and `returnToId` are always provided\n\nIt is important to note that if `sendToVoicemail` is `true` then Spoke will **never** ring the target extension, instead the call goes straight to the target extension's voicemail flow.\n\n## Returning unanswered calls\n\nIf you update the call with the redirect URL documented above, and only provide the `extension` and `organisationId` parameters, then Spoke's standard business rules kick in.  This means that if the target extension is unavailable or does not answer, then Spoke's standard \"unanswered call\" rules apply:\n\n* For calls to a `User` extension, the call will go the user's voicemail\n* For calls to a `Team` extension, the call will follow the call group's \"unanswered\" call flow configuration - which could send the call to another call group, the group's voicemail or to an external PSTN number\n\nTo override this behaviour, and return control of the call back to your application, you have three options:\n\n**1. Return to a Studio Flow**\n\nAdd `&returnTo=flow&returnToId={FLOW_SID}` to the `url` parameter in the update method above:\n\n```javascript\nconst client = require('twilio')();\n\nclient.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')\n  .update({\n    method: 'POST',\n    url: 'https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}&returnTo=flow&returnToId={STUDIO_FLOW_SID}'\n  });\n```\n\nThis will return the call to a Twilio Studio flow.  If you have sent the call from the same flow by using the redirect widget, then you can control what happens next to the call by connecting a new widget to the `return` output of the redirect widget.\n\n**2. Send the call to a TaskRouter Workflow**\n\nAdd `&returnTo=taskQueue&returnToId={WORKFLOW_SID}` to the `url` parameter in the update method above:\n\n```javascript\nconst client = require('twilio')();\n\nclient.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')\n  .update({\n    method: 'POST',\n    url: 'https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}&returnTo=taskQueue&returnToId={WORKFLOW_SID}'\n  });\n```\n\nThis will send the call to a Twilio Task Router Workflow, which could be attached to Flex, or a workflow/task queue that your own application listens to.\n\n**3. Send the call to an HTTPS endpoint**\n\nAdd `&returnTo=postEndpoint&returnToId={ENCODED_HTTPS_URL}` to the `url` parameter in the update method above.\nThis can be a Twilio Function or any HTTPS endpoint that accepts a POST request.\n\nThe following example will redirect the call to the provided URL.\n\n```javascript\nconst client = require('twilio')();\n\nconst returnToPostEndpoint = encodeURIComponent(\"https://example.com/return-post-endpoint\");\n\nclient.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')\n  .update({\n    method: 'POST',\n    url: `https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}&returnTo=postEndpoint&returnToId=${returnToPostEndpoint}`\n  });\n```\n\nDetails about the request body sent by Twilio can be found [here](https://www.twilio.com/docs/voice/twiml#twilios-request-to-your-application).\n\n> Note: The POST request will be sent by Twilio with an `X-Twilio-Signature` header.\n> We recommend you secure the endpoint by [validating that the request is coming from Twilio](https://www.twilio.com/docs/usage/security#validating-requests).\n> For redirects to a Twilio Function, this can be done by [setting the visibility of the Function to Protected](https://www.twilio.com/docs/serverless/functions-assets/visibility#protected).\n\nInvalid URLs will be ignored and unanswered calls will not be returned.\n\n## Sending the call to voicemail\n\nAdd `&sendToVoicemail=true` to the `url` parameter in the update method above:\n\n```javascript\nconst client = require('twilio')();\n\nclient.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')\n  .update({\n    method: 'POST',\n    url: 'https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}&sendToVoicemail=true'\n  });\n```\n\nThis will force Spoke's call flows to bypass availability checks and assume the target entry has no availability. In the\ncase of a `Team`, it also bypasses unanswered call roll-over rules.  The call will be sent directly to the target entry's\nvoicemail.  The target entry will:\n\n* Receive a standard missed call/voicemail notification\n* See a missed call in their call history\n* Receive a voicemail email including transcript (if that option is enabled)\n\n> Note : As noted above, only `User` and `Team` extensions currently support voicemail.\n\n## Overriding call timeouts\n\nIf a valid number is provided as the `timeout`, then Spoke will use it as the number of seconds to wait for someone to answer the call before returning the call or sending it to voicemail.\n\n* For calls to a `User` or a `Device`, this is the number of seconds Spoke will ring the user or the device.\n  * The supported range of values for `timeout` when calling a user or a device is from 10 to 70 seconds. If the provided parameter falls outside the range, it will be rounded to the nearest supported value.\n* For calls to a `Team`, this is the number of the seconds Spoke will wait for someone to answer the call before returning or forwarding the call.\n  * The supported range of values for `timeout` when calling a team is from 10 to 300 seconds. If the provided parameter falls outside the range, it will be rounded to the nearest supported value.\n\nIf a valid number is provided as the `nextOfferTimeout`, then Spoke will use it as the number of seconds to wait for calls to a `Team` before offering the call to the next available user(s). The supported range of values for `nextOfferTimeout` is from 5 to 60 seconds. If the provided parameter falls outside the range, it will be rounded to the nearest supported value.\n\n> Note : The asynchronous nature of API calls between Spoke and Twilio coupled with the overhead of setting up and tearing down call legs means that timeout values are indicative only, and the follow on action may occur some number of seconds after the timeout expires.\n\n## Setting call priority\n\nIf a valid value is provided as the `priority`, then Spoke will use it to:\n\n* Determine which calls take priority when selecting the next call to queue for a user.\n* Determine the order in which calls are offered to a user.\n\nThe supported range of values for `priority` is an integer value between 1 and 9, where 1 is the highest priority and 9 is the lowest. If the provided parameter falls outside the range, the call will be assigned a default value of 5.\n\n## Setting passthrough parameters\n\nPassthrough parameters are stored against the call record and are then included in the call's [webhook events](#section/Webhook-Events). These parameters can also be retrieved when [getting the call resource through the Spoke API](#tag/Calls/operation/callGetById).\n\nUse passthrough parameters with Redirect to track calls that have been initially handled by other Twilio applications (such as Studio, Flex or your own custom application), ensuring that the outcome of the call can be associated correctly with your external applications (such as CRM or in-house systems).\n\nExamples of passthrough parameters include caller verification, IVR selections or other data collected from external systems during the initial phase of the call.\n\nTo attach passthrough parameters to a call, add them to the `url` parameter with the parameter name prefixed with `x-` when updating the call:\n\n```javascript\nconst client = require('twilio')();\n\nclient.calls\n  .update({\n      method: 'POST',\n      url: 'https://api.spokephone.com/telephony/redirect?extension={EXTENSION}&organisationId={SPOKE_ORG_ID}&x-contactId=HS12345&x-orderId=OR12345'\n  });\n```\n\n**Important**: All the query parameters of the `url` must be in alphabetical order. In the example above `x-contactId` must come before `x-orderId`.\n\n* Size Limit: The total length of all passthrough parameters (including parameter names and values) must not exceed 1000 bytes. If this limit is exceeded, all passthrough parameters will be discarded.\n* Processing: Parameter names and values are URL-decoded, validated for safety, and stored as-is upon input. No additional processing is performed.\n\n# Sample Integrations\n\n## Using Spoke's Runtime Functions to integrate Twilio Studio with Spoke's Programmable Softphone\n\n### Overview\nYou can get up and running quickly with Spoke and Twilio Studio by leveraging Spoke's Directory API and our open source Twilio Runtime Functions.\n\n1. The Spoke Directory API provides you with programmable lookup into the Spoke Unified Directory. The response payload includes real time availability of Spoke Users and Teams, enabling you to make routing decisions based on real time presence and availability.\n2. Get the [Spoke Twilio Runtime functions here](https://github.com/spoke-ph/twilio-runtime-spoke-api). These functions deploy into your Twilio account and give you quickstart access to the Spoke Directory API from Twilio Studio.\n\n>Before getting started, we recommend you read the [Core Concepts](#section/Core-Concepts) section above to familiarise yourself with the Spoke Directory structure and how Twilio calls integrate with Spoke.\n\n>To follow along with this guide, you'll need a free Spoke developer account, deployed into your Twilio account, (get one at https://account.spokephone.com/twilio) and you should have set your Spoke account up with 1 or 2 users.\n\n<br />\n\n### How To: Basic Studio Flow Using getExtension Function and twimlRedirectUrl\n\nIn this How To, we're going to show you how to quickly get a Twilio Studio flow connecting to Spoke using the Directory API and Twilio Runtime Functions.\n\n<img alt=\"Studio Flow with Get Extension and Redirect\" src=\"./img/runtime_functions/flow_with_get_extension_and_redirect.png\" width=\"75%\" />\n\nThe above Studio flow leverages the `getExtension` function to check availability of a Spoke directory entry, and if it is available send the call over to that extension.\n\n**1. Setup**\n\nTo get started, you'll need to deploy the Spoke Twilio Runtime Functions into your account, then create a Studio Flow attached to a Twilio phone number, and add a Gather widget.\n\n**2. Add Run Function widget**\n\nTo access one of the functions you just deployed from a Studio flow, drop a `Run Function` widget into your flow and connect it to the `User Pressed Keys` output out of your `Gather` widget. From here, select the `SERVICE`, `ENVIRONMENT`, and `FUNCTION` you want to run:\n\n<img alt=\"Get Extension Widget Config\" src=\"./img/runtime_functions/get_extension.png\" width=\"75%\" />\n\nYou will need to add one parameter to the function, called `extension`, and set the value to `{{widgets.welcome_message.Digits}}`.\n\nThe getExtension function returns the following fields by default.\n\n1. **displayName** - The display label of the directory entry\n2. **type** - The type (`userWithAvailability`, `teamWithAvailability` etc) of the directory entry\n3. **status** - The current (real time) availability of the directory entry\n4. **availabilitySummary** - Human readable availability summary\n5. **twimlRedirectUrl** - Redirect the call to this url to connect the caller to the directory entry\n\nYou can change the function to return any directory entry fields - these are documented in the [`GET /directory`](#tag/Directory) section of the developer reference.\n\n**3. Add Split Widget**\n\nThe split widget allows you to branch your flow based on a matching condition. Drop a `Split` widget into your flow and connect it to the `Success` output of the `Run Function` widget.\n\n<img alt=\"Get Extension Widget Config\" src=\"./img/runtime_functions/availability_split.png\" width=\"75%\" />\n\nIn this case we are branching based on the `status` field - and will only send the call to the directory entry associated with the extension if the entry is available. You can access the response body fields from the run function widget using the following path: `{{widgets.[run_function_widget_name].parsed.[field_name]}}`.\n\nIn this case, we want to check the availability status of the extension, so we check that the `widgets.get_extension.parsed.status` field is equal to `available`\n\n**4. Add Redirect Widget**\n\nThe final step is to add the redirect widget which will send the incoming call across to the Spoke extension.  Drop a `TwiML Redirect` widget into your flow and connect it to the `If value equal to available` output of the `Split` widget.\n\n<img alt=\"TwiML Redirect Widget Config\" src=\"./img/runtime_functions/redirect_widget.png\" width=\"75%\" />\n\nConfiguring this widget is simple - you just need to set the `URL` field to `{{widgets.get_extension.parsed.twimlRedirectUrl}}`\n\n**5. Publish and test your flow**\n\nThat's it! Now all you need to do is publish your flow, and test that it works.\n\nTo test, dial the incoming number attached to your Studio flow, and when you hear the gather prompt, enter the extension of one of your Spoke users.  If you've configured everything correctly, the call should connect through to the user's softphone on Spoke.\n\n### Review\n\nThis How To has introduced you to creating a basic Studio flow connected to a Spoke softphone, using the Spoke Directory API and Runtime functions. This only scratches the surface of what you can build.\n\nHere are some other ideas to explore:\n\n* Return the caller back to the initial gather menu if the extension is not found\n* Add a second gather widget to the `No condition matches` output of the `Split` widget and build a new flow around the extension being unavailable - maybe send the caller to a Flex queue.\n* Use the optional `returnTo` and `returnToId` parameters to return the call to your flow if the call goes unanswered in Spoke.\n\n\n## Microsoft Power Automate to Dynamic 365\n\n### Overview\n\n> The Power Automate package is provided as an example set of templates to get you started with the most common\n> integration scenarios from Spoke to Dynamics 365. We expect anyone using the provided templates to accept and own the\n> operation and management of these example Microsoft Power Automate flows and ensure it is fit for purpose in the\n> environment it is installed.\n\nPower Automate is a service that helps you create automated workflows between your favorite apps and services, to synchronize files, get notifications, collect and update data, and more.\n\nPower Automate is an ideal solution for customers using Microsoft, to integrate new and existing workflows to Spoke Phone, and take advantage of owning the integration and business workflows end to end.\n\nSpoke has created a set of example template flows to get a customer up and running with the most common scenarios using MS Power Automate to integrate Spoke to Dynamics 365.\n\n[Read the DISCLAIMER before downloading the samples](https://sp-static-assets-prod.s3.amazonaws.com/sampleIntegrations/microsoft/powerAutomate/DISCLAIMER.txt)\n\n[Download the User Guide](https://sp-static-assets-prod.s3.amazonaws.com/sampleIntegrations/microsoft/powerAutomate/SpokePhone_PowerAutomate_Dynamics365_Guide.pdf)\n\n[Download the Microsoft Power Automate to Dynamics 365 samples](https://sp-static-assets-prod.s3.amazonaws.com/sampleIntegrations/microsoft/powerAutomate/SpokePhone_Dynamics365.zip)\n\n[Download the postman collection of sample Spoke webhook events](https://sp-static-assets-prod.s3.amazonaws.com/sampleIntegrations/microsoft/powerAutomate/PowerAutomate_SpokePhone_Dynamics365_webhooks.postman_collection.json)\n\n# Webhook Events\n\n## Overview\n\nSpoke supports webhooks as a mechanism for notifying your systems when an event occurs. Webhooks are useful for listening to asynchronous events occurring on the Spoke platform, such as changes to a call's state over time; a change to the contact associated with a call; or a call recording becoming available.\n\nTo get started, you will need to configure a webhook in the Spoke [account portal](https://account.spokephone.com/developers/webhooks). Alternatively, you can use the [Webhook API](#tag/Webhooks/operation/webhookPost) to configure a webhook. During configuration you will be given the option to specify event types you wish to receive notifications for. You will also be required to provide a valid, publicly routable `HTTPS` URL that accepts `POST` requests with the `application/json` content type.\n\nEvery Spoke event sent to your webhook is wrapped in the following standard wrapper that provides important information about the event, such as its type, a timestamp of when it was created, and the event data itself.\n\n## Securing Your Webhooks\n\nOnce your application is configured to receive events, it will listen for any event sent to the endpoint. For security reasons, we strongly recommend that you ensure requests to your endpoint come from Spoke. The easiest method to validate that a request was sent via Spoke is to verify the signature, and timestamp sent in every request against the secret that was provided to you when you created your webhook.\n\n### Verifying the signature\n\nA request is considered valid based on the following conditions:\n- The `x-spoke-timestamp` header is a valid UNIX timestamp, and represents a time sent within the last 5 minutes (using millisecond precision). This header allows the consumer to validate when a request was sent, to avoid [replay attacks](https://en.wikipedia.org/wiki/Replay_attack).\n- The `x-spoke-signature` header is formatted as `sha256=<HMAC algorithm cipher text>`, and it contains the correct hash based on the hexadecimal representation of the SHA256 HMAC algorithm with the signing secret applied to `<x-spoke-timestamp header value>.<request body>`. The calculated hash includes the timestamp to ensure that an attacker cannot modify the timestamp without also invalidating the message signature.\n\nA request can be validated via the following:\n\n```js\nconst isValidSpokeRequest = (requestBody: string, signingSecret: string, spokeTimestamp: number, spokeSignature: string): boolean => {\n\n  // Determine if timestamp is valid\n  const isValidTimestamp = (Date.now() - spokeTimestamp) <= 300000; // 5 x 60 x 1000\n  if (!isValidTimestamp) {\n    return false;\n  }\n\n  // Determine if the signature is valid\n  const [algorithm, cipher] = spokeSignature.split(\"=\");\n  const body = `${spokeTimestamp}.${requestBody}`\n\n  const h = crypto.createHmac(algorithm, signingSecret);\n  h.update(body);\n  return h.digest(\"hex\") === cipher;\n}\n```\n\n## Delivery Attempts, Retries and Event Ordering\n\n### Delivery Attempts\n\nSpoke will attempt to deliver events to your webhooks 10 times, over the course of 24 hours with an exponential back off. For an event to be considered successfully delivered, your endpoint will need to respond with a valid `2XX` HTTP status code within 5 seconds of the HTTP request being received. In the Developers section of the [Account Portal](https://account.spokephone.com/developers/events), you can view all attempts to deliver an event to your endpoint.\n\n### Retries\n\nSpoke will retry delivering a webhook event if the request fails and your endpoint responds with any of the following status codes:\n\n- Server-side errors: `5xx`\n- Throttling errors: `429`\n- Request timeout errors: `408`\n\nFailed delivery attempts that respond with any other status codes will not be retried. For example, responses with a `400` status code (Bad Request) will not be retried, as it signals that repeating the same request will fail with the same error.\n\n### Automatic Disabling of Webhooks\n\nIn order to manage system capacity across the platform, Spoke will automatically disable a webhook once more than consecutive 1000 events have failed to deliver.  The Spoke Administrator who created the webhook will be notified via email that the webhook has been disabled.\n\n### Order of Events\n\nSpoke does not guarantee delivery of events in the order in which they are generated. Your endpoint should not expect delivery of events in order, and should handle these accordingly.\n\n## Example Timelines of Events\n\nBelow are some examples of when the above events might occur during the lifetime of some calls.\n\n*Note: These are example timelines. While most of the events will fire in a similar order to the ones given below, this is not guaranteed. See [Order of Events](#section/Webhooks/Delivery-Attempts-Retries-and-Event-Ordering) for more details on how event ordering might affect your webhook.*\n\n### Example Timelines of Call and Availability Events\n\n\n---\n\n#### Example 1 - Basic Call Timeline with User Answered Call\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Events Fired</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.started/post\">\n        <code>call.started</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Alice starts a call to Spoke User Bob. </h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.answered/post\">\n        <code>call.answered</code>\n      </a><br />\n      <a href=\"/#tag/User-Events/paths/user.availability.updated/post\">\n        <code>user.availability.updated</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob answers the call</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.hungup/post\">\n        <code>call.hungup</code>\n      </a>\n    </div>\n  </div>  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>After talking for a while, Alice is satisfied with Bob's response and hangs up the call.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.hungup/post\">\n        <code>call.hungup</code>\n      </a><br />\n      <a href=\"/#tag/User-Events/paths/user.availability.updated/post\">\n        <code>user.availability.updated</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob also hangs up the call</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.ended/post\">\n        <code>call.ended</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>The call has completed on the Spoke platform</h4>\n    </div>\n  </div>\n\n</div>\n\n---\n\n#### Example 2 - Unanswered Call to Team\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Events Fired</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.started/post\">\n        <code>call.started</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Alice starts a call to the Customer Support team</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.not_answered/post\">\n        <code>call.not_answered</code>\n      </a><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>No one is available to answer the call, and the call goes to voicemail</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.hungup/post\">\n        <code>call.hungup</code>\n      </a>\n    </div>\n  </div>  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>After talking leaving a message, Alice hangs up the call.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.ended/post\">\n        <code>call.ended</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>The call has completed on the Spoke platform</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.voicemail.available/post\">\n        <code>call.voicemail.available</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>The voicemail recording has finished processing, with the voicemail transcript sent to members of the Customer Support team</h4>\n    </div>\n  </div>\n\n</div>\n\n---\n\n#### Example 3 - Contact Assignment and Recording Transcript\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Events Fired</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.started/post\">\n        <code>call.started</code>\n      </a><br />\n      <a href=\"/#tag/Call-Events/paths/call.answered/post\">\n        <code>call.answered</code>\n      </a><br />\n      <a href=\"/#tag/User-Events/paths/user.availability.updated/post\">\n        <code>user.availability.updated</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Alice starts a call to Bob. Alice has a new number that isn't in Bob's CRM so she shows up as an unknown caller to Bob. Bob answers the call</h4>\n    </div>\n  </div>\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.contact_assigned/post\">\n        <code>call.contact_assigned</code>\n      </a>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob determines that the Unknown caller is actually Customer Alice</h4>\n    </div>\n  </div>\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.highlight.created/post\">\n        <code>call.highlight.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob decides that this call is about Alice's money, and decides to highlight the current part of the call as \"Money\"</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.hungup/post\">\n        <code>call.hungup x 2 (Alice & Bob)</code>\n      </a><br/>\n      <a href=\"/#tag/User-Events/paths/user.availability.updated/post\">\n        <code>user.availability.updated</code>\n      </a><br/>\n      <a href=\"/#tag/Call-Events/paths/call.ended/post\">\n        <code>call.ended</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice hangs up the call, Bob hangs up the call, and the call ends.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.recording.available/post\">\n        <code>call.recording.available</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Call recording successfully completes processing</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Call-Events/paths/call.transcript.created/post\">\n        <code>call.transcript.created</code>\n      </a><br/>\n      <a href=\"/#tag/Call-Events/paths/call.transcription_completed/post\">\n        <code>call.transcription_completed</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Call recording is transcribed successfully</h4>\n    </div>\n  </div>\n</div>\n\n### Example Timelines of Conversation Events\n\n---\n\n#### Example 1\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Events Fired</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>User Alice wants to talk to Bob over SMS</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.message.created/post\">\n        <code>conversation.message.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice sends an SMS to Bob through the Spoke Phone app</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag//Conversations/paths/conversation.message.created/post\">\n        <code>conversation.message.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob receives the SMS from Alice and replies</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.inactive/post\">\n        <code>conversation.inactive</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice finishes messaging with Bob. The conversation automatically goes into an inactive state after 30 minutes</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.closed/post\">\n        <code>conversation.closed</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>After a year of inactivity, the conversation gets closed automatically</h4>\n    </div>\n  </div>\n</div>\n\n---\n\n#### Example 2\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Events Fired</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Bob wants to talk to user Alice over SMS</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.message.created/post\">\n        <code>conversation.message.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob sends an SMS to Alice</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.message.created/post\">\n        <code>conversation.message.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice receives the SMS from Bob through the Spoke Phone app and replies</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.inactive/post\">\n        <code>conversation.inactive</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice finishes messaging with Bob, neither party sends an SMS for 30 minutes. The conversation goes into an inactive state</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.message.created/post\">\n        <code>conversation.message.created</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob starts messaging Alice again in the conversation. The timer for both inactive state and the closed state gets reset</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.inactive/post\">\n        <code>conversation.inactive</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob finishes messaging with Alice, neither party sends an SMS for 30 minutes. The conversation goes into an inactive state</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <a href=\"/#tag/Conversation-Events/paths/conversation.closed/post\">\n        <code>conversation.closed</code>\n      </a>\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice manually closes the conversation</h4>\n    </div>\n  </div>\n</div>\n\n# Changelog\n\n## 2026-06-29 - Added Teams API endpoints\n* Added new API endpoints to list teams and manage teams user memberships\n  * [`GET /teams`](#tag/Teams/operation/teamGet) endpoint to list the teams in your organisation\n  * [`DELETE /teams/{teamId}/users/{userId}`](#tag/Teams/operation/teamUserDelete) endpoint to remove a user from a team\n  * [`PUT /teams/{teamId}/users/{userId}`](#tag/Teams/operation/teamUserPut) endpoint for adding a user to a team or changing their offer priority\n\n## 2026-06-04 - Added support for analyzing content from aggregated agent scorecards\n* Added a new variant of [POST `/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisPost) request payload to support analyzing aggregated agent scorecards\n\n## 2026-05-19 - Added licenses field to User object\n* Added new `licenses` attribute to the `UserWithAvailability` type\n  * Applies to [`GET /users`](#tag/Users/operation/userGet), [`GET /users/{id}`](#tag/Users/operation/userGetById), [`GET /directory`](#tag/Directory/operation/directoryGet), [`GET /directory/{entryId}`](#tag/Directory/operation/directoryGetById), the [`user.availability.updated`](#tag/User-Events) webhook event, and the [`team.availability.updated`](#tag/Team-Events) webhook event\n\n## 2026-05-14 - Added new Conversation Messages API and deprecated legacy message APIs\n* Added new [`POST /conversationMessages`](#tag/Conversations/operation/developerApiConversationMessagePost) endpoint\n* Marked [`POST /messages`](#tag/Conversations/operation/developerApiMessagesPost) and [`POST /teamMessages`](#tag/Conversations/operation/developerApiTeamMessagesPost) endpoints as deprecated\n  * These endpoints have been replaced with [`POST /conversationMessages`](#tag/Conversations/operation/developerApiConversationMessagePost) and will be removed in a future version of the API\n\n## 2026-05-11 - Added support for getting a user by email\n* Added new optional query parameter `email` to [`GET /users`](#tag/Users) endpoint\n\n## 2026-04-30 - Added support for controlling user notifications in Conversations APIs\n* Added optional `notifyUsers` attribute to:\n  * [`POST /messages`](#tag/Conversations/operation/developerApiMessagesPost) request payload\n  * [`POST /teamMessages`](#tag/Conversations/operation/developerApiTeamMessagesPost) request payload\n* Added [webhook delivery retry documentation](#section/Webhooks/Delivery-Attempts-Retries-and-Event-Ordering), including retryable status codes\n\n## 2026-03-11 - Redirect API now accepts any valid HTTPS URL\n* The [Redirect API](#section/Routing-Twilio-Calls-into-Spoke/Returning-unanswered-calls) now accepts any valid HTTPS URL as the `returnToId`, when `returnTo` is set to `postEndpoint`\n\n## 2026-02-20 - Added support for Enlighten integration with Insights Data Action\n* Added optional `preferences` field to the [`Insights Data Action Response`](#tag/Insights/Insights-Response)\n  * Controls the preferred Insights context source and Enlighten cards display order\n* Added support for group MMS\n  * POST [`/teamMessages`](#tag/Conversations/operation/developerApiTeamMessagesPost) endpoint\n  * [`Inbound Conversations Data Action Request Payload`](#tag/Inbound-Conversations/Request-and-Response)\n\n## 2026-01-07 - Added new author, participants and channel attributes to Conversation webhook events\n* Added new `participants` and `channel` attributes to `Conversation`\n  * These fields are surfaced in:\n    * All [conversation webhook events](#tag/Conversation-Events)\n    * The [`contact.shared` event](#tag/Contact-Events/paths/contact.shared/post)\n* Added new `author` attribute to each message in `messages` attribute of `Conversation`\n  * This is surfaced in all [conversation webhook events](#tag/Conversation-Events)\n\n## 2025-12-18 - Added a new Content Analysis by Call ID endpoint\n* Added a new GET [`/calls/{id}/contentAnalysis`](#tag/Calls/operation/contentAnalysisGetByCallId) endpoint\n\n## 2025-12-15 - Added a new Content Analysis endpoint\n* Added a new GET [`/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisGet) endpoint\n\n## 2025-12-01 - Added support for usage information to Content Analysis artifacts\n* Added `usage` property to `artifacts` in:\n  * The response payload of [`/contentAnalysis/{id}`](#tag/Content-Analysis/operation/contentAnalysisGetById)\n  * The [`content_analysis.completed` event](#tag/Content-Analysis-Events/paths/content_analysis.completed/post)\n\n## 2025-09-01 - New conversation contact assigned webhook event\n* Added support for the new [`conversation.contact_assigned` event](#tag/Conversation-Events/paths/conversation.contact_assigned/post)\n\n## 2025-07-29 - Added support for setting conversation name in Messages API\n* Added support for setting the conversation's name via [`POST /messages`](#tag/Conversations/operation/developerApiMessagesPost)\n* Added `location` to `User` in `Call` and `Conversation` types\n* Added `media` to `Message` type in [conversation webhook events](#tag/Conversation-Events)\n  * The `media.vendorResourceUrl` is populated for BYOT accounts\n\n## 2025-07-21 - New contact shared webhook event\n* Added support for the new [`contact.shared` event](#tag/Contact-Events/paths/contact.shared/post)\n* Marked [`call.contact_assigned_with_add`](#tag/Call-Events/paths/call.contact_assigned_with_add/post) and [`call.contact_assigned_with_update`](#tag/Call-Events/paths/call.contact_assigned_with_update/post) events as deprecated\n  * These events have been replaced with the `contact.shared`  event and will be removed in a future version of the API\n\n## 2025-07-17 - Added support for deleting a content analysis\n* Added a new DELETE [`/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisDelById) endpoint\n\n## 2025-07-07 - Added support for recording's transcription model via content analysis APIs\n* Added optional `transcriptionModel` attribute to `recordings` of `content` in [POST `/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisPost) request payload\n\n## 2025-06-30 - Added support for custom analyzer via content analysis APIs\n* Added support for custom analyzer attribute when submitting a content analysis request via POST [`/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisPost) endpoint\n* Added `analyzer` attribute to `ContentAnalysis` type\n\n## 2025-06-17 - New content analysis APIs and webhook event\n* Added new API endpoints to submit and inspect content analysis requests\n  * POST [`/contentAnalysis`](#tag/Content-Analysis/operation/contentAnalysisPost) endpoint for submitting a content analysis request\n  * GET [`/contentAnalysis/{id}`](#tag/Content-Analysis/operation/contentAnalysisGetById) endpoint for getting a content analysis\n* Added support for the new [`content_analysis.completed` event](#tag/Content-Analysis-Events/paths/content_analysis.completed/post)\n\n## 2025-05-06 - Added support for creating, reading, updating and deleting personal phonebooks\n* Added documentation for [creating or updating a personal phonebook](#tag/Phonebooks/operation/phonebookPutByEmail)\n* Updated description for existing `/phonebooks/{id}` and `/phonebooks/{id}/contacts/*` endpoints\n  * Added support for using a user's email address as the phonebook `id` parameter to refer to the user's personal phonebook\n\n## 2025-04-14 - Added support for calls with multiple transcripts\n* Added support for `call.transcription_completed` event\n* Updated the documentation for `text` attribute of `Transcript` type\n  * The transcript text may include `LEAVE` and `JOIN` speaker events for call recordings\n* Added `vendorCallIds` attribute to `dials` attribute of `parties` in the `Call` type\n\n## 2025-02-12 - Added support for user's manager and sending a team message on behalf of a user\n* Added new `manager` field to user fields\n  * This field is surfaced in:\n    * GET [`/users`](#tag/Users) endpoint response\n    * GET [`/users/{id}`](#tag/Users/operation/userGetById) endpoint response\n    * GET [`/directory`](#tag/Directory) endpoint response\n    * All [user webhook events](#tag/User-Events)\n    * All [team webhook events](#tag/Team-Events) where the user is a member of the team\n    * All [conversation webhook events](#tag/Conversation-Events) where the user is the assigned user for the conversation or the user who sent the message\n    * All [call webhook events](#tag/Call-Events) where the user is the assigned user for the call\n* Added optional `sendAsUser` attribute to `messageContent` in [Send Team SMS message](#tag/Conversations/operation/developerApiTeamMessagesPost) request payload\n  * When set, this field allows sending a team message on behalf of a user\n\n## 2025-01-13 - Include passthrough parameters in Call Insights data action requests\n* Added passthrough parameters as query string parameters in Call Insights data action requests\n\n## 2024-12-16 - Added support for call recording's transcript\n* Added support for `call.transcript.created` event\n* Added new `transcript` attribute to call `Recording` type\n\n## 2024-12-09 - New transcript APIs and webhook event\n* Added new API endpoints to manage transcripts\n  * GET [`/transcripts`](#tag/Transcripts/operation/transcriptGet) endpoint for list transcripts\n  * GET [`/transcripts/{transcriptId}`](#tag/Transcripts/operation/transcriptGetById) endpoint for getting a transcript\n  * DELETE [`/transcripts/{transcriptId}`](#tag/Calls/operation/transcriptDeleteById) endpoint for deleting a transcript\n  * GET [`/transcripts/{transcriptId}/segments`](#tag/Transcripts/operation/transcriptGetSegmentsByTranscriptId) endpoint for getting a transcript's segments\n* Added support for the new `transcript.created` event\n\n## 2024-12-03 - Added support for passthrough parameters via Conversation data actions and Conversation APIs\n* Added support for passthrough parameters via the `Inbound Conversations` data action\n* Added support for passthrough parameters via the `Send a new SMS message` and `Send a new Team SMS message` APIs\n* Added support for passthrough parameters in conversation webhook events\n\n## 2024-11-25 - Added support for passthrough parameters via Outbound Call and Team Call data actions and Redirect API\n* Added support for passthrough parameters via the `Outbound Call` and `Team Call` data actions\n* Added support for passthrough parameters via the Redirect API\n\n## 2024-11-06 - Add support for dial deep link passthrough parameters\n* Added support for passthrough parameters via the `dial` deep link route\n  * Added instructions in the `dial` documentation\n  * Added `passthroughParameters` field to the `Call` type, which applies to the call resource and call webhook event data\n\n## 2024-10-22 - Add support for application deep linking\n* Added new `call`, `dial` and `message` deep link routes for the Spoke Phone app\n  * `spoke://call/{callId}` - Navigates to the details of the specified call\n  * `spoke://call/{callId}/insight` - Navigates to the insight for the specified call\n  * `spoke://dial?contactNumber={contactNumber}&callerId={callerId}` - Dials a contact number using a specified caller ID\n  * `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`\n  * `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`\n\n## 2024-10-14 - Add support for getting and deleting a specific call recording\n* Added new API endpoints to manage call recordings\n  * GET [`/call/{callId}/recordings/{recordingId}`](#tag/Calls/operation/recordingGetById) endpoint for getting a call recording\n  * DELETE [`/call/{callId}/recordings/{recordingId}`](#tag/Calls/operation/recordingDeleteById) endpoint for deleting a call recording\n* Added new `id`, `callId` and `fileSize` attributes to call `Recording` type\n  * This `id` can be used to delete the call recording via the DELETE endpoint above\n\n## 2024-09-09 - New mimeType and channels attributes for call recordings\n* Added new `mimeType` and `channels` attributes to call `Recording` type\n* Added new `organisationId` attribute webhook event data\n* Added new `spoke.precall` request origin for Call Insights Data Action requests from the Spoke Phone app's incoming calls\n\n## 2024-08-26 - Add support for setting call priority in Team Call Data Action\n* Added new optional parameter `priority` to [`Team Call Data Action Response Payload`](#tag/Team-Call/Overview)\n* Added optional `timezone` attribute to `parties` attribute of `Call` type\n  * The attribute will be included only if the party is of type `user`\n\n## 2024-07-25 - New Insights Data Action response payload and request origin\n* Introduced new Insights Data Action response payload to support context\n  * The old response payload is now **deprecated**. To migrate to the new payload, return the existing payload as `cards` in the new payload.\n* Added new `spoke.callhistory` request origin for Call Insights Data Action requests from the Spoke Phone app's call history\n* Updated `contactEmail` and `contactId` for Call Insights Data Action request parameters for internal calls to a Spoke user\n\n## 2024-05-14 - Fixed incorrect example\n* Fixed incorrect example given for the close timer field. `After 30 days` should be `P30D` not `PT30D`.\n\n## 2024-05-07 - Add support for setting close timer in Messages API and Inbound Conversations Data Action\n* Added new optional parameter `closeTimer` to [`/messages`](#tag/Conversations/operation/developerApiMessagesPost) endpoint\n* Added new optional parameter `closeTimer` to [`Inbound Conversations Data Action Response Payload`](#tag/Inbound-Conversations/Request-and-Response)\n\n## 2024-04-19 - Add support for setting close timer in Team Messages API\n* Added new optional parameter `closeTimer` to [`/teamMessages`](#tag/Conversations/operation/developerApiTeamMessagesPost) endpoint\n\n## 2024-02-08 - New Webhook APIs\n* Added new APIs to manage webhooks\n  * GET [`/webhooks`](#tag/Webhooks/operation/webhookGet) endpoint for listing existing webhooks with pagination\n  * POST [`/webhooks`](#tag/Webhooks/operation/webhookPost) endpoint for creating a new webhook\n  * GET [`/webhooks/{id}`](#tag/Webhooks/operation/webhookGetById) endpoint for getting an existing webhook\n  * PUT [`/webhooks/{id}`](#tag/Webhooks/operation/webhookPutById) endpoint for updating an existing webhook\n  * DELETE [`/webhooks/{id}`](#tag/Webhooks/operation/webhookDelById) endpoint for deleting an existing webhook\n* Added links to example webhook event payloads under the [Types of Events](#section/Webhooks/Types-of-Events) section\n\n## 2024-01-22 - New desktopEnrolledReleaseChannel attributes for user\n* Added new `desktopEnrolledReleaseChannel` attribute to `UserWithAvailability` type\n\n## 2023-10-09 - Add WhatsApp Support for Inbound Conversations Data Action\n* Added new `whatsApp` channel to Inbound Conversations Data Action request payload\n  * `companyAddress` and `contactAddress` are updated to support the new `whatsApp` channel\n\n## 2023-10-03 - New fields for Conversation and Message\n* Added new `vendor`, `vendorConversationId`, `initiatedBy`, `companyNumberOwner` and `name` fields to `Conversation` type\n  * `initiatedBy` and `companyNumberOwner` fields will only be populated for conversations created after 2 October 2023\n* Added new `vendorMessageId` and `isApiCreated` fields to `Message` Type\n\n## 2023-09-25 - Add support for setting conversation claim rule with Inbound Conversation Data Action\n* Added new `claimRule` to Inbound Conversations Data Action response payload\n\n## 2023-09-20 - New Team Messages API\n* Added new POST `/teamMessages` API to send messages on behalf of team using team assigned DDI\n\n## 2023-07-06 - New loginStatus and isDirectorySynced attributes for user\n* Added new `loginStatus` and `isDirectorySynced` attributes to `UserWithAvailability` type\n\n## 2023-06-26 - New Inbound Conversations Data Action\n* Added documentation for the Inbound Conversations Data Action functionality\n* Changed `Call Group` to `Team` inline with changes to Spoke admin and application user interfaces\n\n## 2023-04-11 - Fixed unanswered calls not returned from Redirect API on missed cold transfers\n* Fixed unanswered cold transfers not being returned when `returnTo` and `returnToId` parameters are provided\n  * See [Returning unanswered calls](#section/Routing-Twilio-Calls-into-Spoke/Returning-unanswered-calls)\n\n## 2023-03-13 - Override call group display name via Call Group Data Action\n* Added support for override call group display name via Call Group Data Action\n* Added optional `overriddenDisplayName` attribute to `assignedCallGroup` and `directoryTarget` attributes of `Call` type\n  * The attribute will be included only if the `team`'s the display name is overridden via Call Group Data Action\n\n## 2023-03-02 - Updated Outbound Call Data Action for calls made by SIP devices\n* Added optional device parameters `deviceId`, `deviceAddress` and `deviceExtension` to Outbound Call Data Action request parameters\n  * The device parameters will only be included if call is placed by a standalone SIP device\n* Added support for blocking outbound calls placed by standalone SIP devices via Outbound Call Data Action\n  * This overrides the flag set against the SIP device \"Outbound calls allowed\"\n\n## 2023-02-21 - New isHidden status for team\n* Added new optional query parameter `includeHiddenCallGroups` to [`/directory`](#tag/Directory) endpoint\n  * If `true`, return all directory entries, including hidden call groups.\n  * By default, this flag is false and hidden call groups are excluded from the response\n* Added new `isHidden` attribute to `TeamWithAvailability` type\n\n## 2023-01-23 - New Assigned Call Group attribute on Call and Call Group Data Action Request\n* Added new `assignedCallGroup` attribute to `Call` type\n  * This attribute is only populated for inbound calls, and identifies the last team directory entry a call was for.\n  * Use this attribute to identify calls to a given team.\n  * The attribute contains a trimmed version of the directory entry, containing `id`, `displayName`, `type`, and `extension`\n* __IMPORTANT CHANGE__\n  * The `directoryTarget` field on the `CallGroupDataActionRequestPayload` object has been deprecated in favour of `assignedCallGroup`.\n  * The field will be removed completely in a future release. Please migrate to the new field.\n\n## 2023-01-11 - New Call Group Data Action and Call Attributes for Analytics & Reporting\n* Added documentation for the Call Group Data Action functionality\n* Added new `extension`, `email` and `dials` attributes to each party in `parties` attribute of `Call` type\n  * The `dials` contains a list of dial attempts to the call party with a reason for each dial\n* Added new `joinedAt` and `leftAt`  attributes to each connection in `connections` attribute of `Call` type\n\n## 2022-10-25 - New Insights Data Action\n* Added documentation for the new Data Action functionality\n* Moved original Data Actions menu into its own section\n\n## 2022-09-28 - Override call timeouts\n* Added support for overriding call timeouts using `twimlRedirectUrl`\n\n## 2022-06-20 - New blocked call status and Data Action documentation\n* Added new `blocked` call status and `blocked` outcome to `Call` type\n  * This status is currently for outbound calls only.\n  * The `reason` attribute on the `blocked` outcome identifies the reason the call was blocked.\n    E.g. the reason is set to `dataAction` when the outbound call was blocked by Outbound Call Data Action.\n* Added documentation for the new Data Action functionality\n\n## 2022-06-02 - New Outcome and Tariff attributes on Call\n* Added new `outcome` attribute to `Call` type\n  * This attribute is populated for all calls, and identifies the final outcome of a call\n  * For inbound calls, the attribute has an optional `reason` field, which identifies the reason\n    a call was abandoned or missed.\n* Added new `tariff` attribute to `Call` type, and new `call.tariffed` event\n  * This attribute is populated after the call has been tariffed.\n  * Once tariffed, a `call.tariffed` event is emitted\n  * The tariff is calculated for each connected call party on the call, based on the connection's route,\n    duration and per-minute price\n  * This field will only be populated for Spoke accounts that have the \"Include Tariff in Call API\" add-on\n    enabled in their account. Contact your Spoke Account Manager to have this add-on enabled.\n\n## 2022-05-04 - New suspended status for user\n* Added new optional query parameter `includeSuspendedUsers` to [`/directory`](#tag/Directory) endpoint\n  * If `true`, return all directory entries, including suspended users.\n  * By default, this flag is false and suspended users are excluded from the response\n* `UserWithAvailability.status` is now one of invited, active or suspended\n\n## 2022-04-11 - New Call Attributes for Analytics & Reporting\n* Added new `directoryTarget` attribute to `Call` type\n  * This attribute is only populated for inbound calls, and identifies the initial directory entry a call was for.\n  * Use this attribute to identify calls to a given team, user or other directory entry.\n  * Webhook call events will include this attribute after the call has been processed by the Spoke telephony service.\n    This means the earliest events in the call lifecycle to include this attribute will be `call.answered` / `call.not_answered`\n  * The attribute contains a trimmed version of the directory entry, containing `id`, `displayName`, `type`, `extension` and `email`\n* Added new `waitTime` and `waitTimeText` attributes to `Call` type\n  * For an answered call, the `waitTime` is calculated as the millisecond difference between `startedAt` and `answeredAt` fields.\n  * For an unanswered call, the `waitTime` is equivalent to the value of `duration`.\n  * The `waitTimeText` field is a human readable version of the `waitTime` field, similar to `durationText`\n* Added GET [`/directory/{entryId}`](#tag/Directory/paths/~1directory~1{entryId}/get) endpoint.\n  * Retrieves specified entry from the directory\n\n## 2022-03-17 - New GET endpoint on /phonebooks\n* Added GET [`/phonebooks/{id}/contacts/{contactId}`](#tag/Contacts/paths/~1phonebooks~1{id}~1contacts~1{contactId}/get) endpoint.\n  * Retrieves specified contact from an existing phonebook\n\n## 2022-02-02\n* Added new `excludeEmpty` query parameter to the  GET [`/phonebooks`](#tag/Phonebooks) endpoint.\n  * Set this to true to exclude phonebooks that do not contain any contacts.\n* Added support for optional `sortOrder` and `contactNumber` query parameters to GET [`/calls`](#tag/Calls) endpoint.\n\n## 2021-12-15 - New Call Events and Send to Voicemail Support\n* Added support for `call.started`, `call.answered`, `call.not_answered`, `call.hungup` event\n* Added support for sending a call directly to voicemail using `twimlRedirectUrl`\n\n## 2021-11-24 - New vendor and vendorCallId fields\n* Added new `vendor` and `vendorCallId` fields to `UserWithAvailability` and `Call` types\n  * These fields include the vendor who carried the call and the vendor's call ID\n  * In the case of Twilio, `vendorCallId` contains the `callSid` of the parent call\n  * For the `UserWithAvailability` type, these fields will be populated (along with `callId`)\n    when the user's availability `status` is `busy` and `notAvailableRule` is `busyOnACall`\n\n## 2021-11-23 - User & Team Availability Webhook Events\n* Added support for `user.availability.updated` event\n* Added support for `team.availability.updated` event\n\n## 2021-11-03\n* Added new `sipAddress` field to Device object for [`/directory`](#tag/Directory) endpoint\n\n## 2021-10-20\n* Added new fields to `trunkUsers`, `trunkDevices` and `trunkQueues` which are returned by [`/trunks`](#tag/Trunks) and [`/directory`](#tag/Directory)\n  * `displayName` - Display name of the directory entry\n  * `type` - Directory type\n  * `twimlRedirectUrl` - Redirecting an inbound Twilio call to this target url will transfer the call to this entry\n\n## 2021-10-11 - Added trunk entities to /directory endpoint\n* Added `trunkUsers`, `trunkDevices` and `trunkQueues` to the list of entries returned by [`/directory`](#tag/Directory) endpoint\n\n## 2021-10-05 - Updated mobile field of User and UserWithAvailability objects\n* Updated `mobile` field of User and UserWithAvailability objects\n  * This field will now be omitted if the organisation is configured to exclude employee phone numbers from Spoke APIs\n\n## 2021-09-30 - Added twimlRedirectUrl field to objects for /directory and /users endpoint\n* Added new `twimlRedirectUrl` field to TeamWithAvailability, UserWithAvailability and Device object for\n  * [`/directory`](#tag/Directory) endpoint\n  * [`/users`](#tag/Users) endpoint\n\n## 2021-09-27 - New /directory endpoint\n* Added [`/directory`](#tag/Directory) endpoint. Lists or finds directory entries. Supports optional search parameters.\n  * 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`\n  * Optional query parameters to search the directory by `extension`, `ivrKey` or `phoneNumber`\n* Added new fields to [`/users`](#tag/Users) endpoint:\n  * `phoneNumbers` - List of phone numbers of the user\n  * `displayName` - Display name of the user\n  * `type` - Directory type\n  * `availability.availabilitySummary` - Describes the current availability of the user\n\n## 2021-05-31 - Send SMS Messages\n* Added support for sending SMS Messages on behalf of a Spoke user:\n  * The Spoke user must have an SMS enabled DDI\n  * The `from` parameter allows you to specify either the user's SMS enabled DDI or their email address\n  * The message will be added to a conversation (if one exists with the customer) or a new conversation will be automatically created\n  * The message will appear in the user's conversations view in the Spoke application\n  * The `conversation.message.created` event will be fired when the message is created.\n\n## 2021-03-22 - Conversation Webhook Events\n* Added support for Conversation events\n  * `conversation.inactive`\n  * `conversation.closed`\n  * `conversation.message.created`\n\n## 2020-09-08 - New Webhooks support\n* 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.\n\n## 2020-08-05 - Added ability to assign Trunk Users & Phone Numbers to Spoke Users\n* You can now assign trunk users and phone numbers to Spoke users when creating or updating trunk users via the [`/trunks/{trunkId}/trunkUsers/*`](#tag/Trunk-Users) endpoint.\n\n## 2020-07-24 - New OAuth 2.0 content type support\n* The content type for generating OAuth 2.0 access tokens using the `client_credentials` grant type now supports `application/x-www-form-urlencoded`,\n  this is better aligned with RFC6749 which outlines how OAuth 2.0 tokens should be generated. The previous `application/json` format is now **deprecated**.\n\n## 2020-07-17 - Added missing fields for Phonebook, Contact, Trunk Device, Trunk Queue and Trunk User to documentation\n* Requests for PUT [`/phonebooks`](#tag/Phonebooks) endpoints can include additional nullable fields in the body: `countryIso`\n* Requests for PUT [`/phonebooks`](#tag/Phonebooks) and [`/contacts`](#tag/Contacts) endpoints with contact can include additional nullable fields in the body: `firstName`, `lastName` and `jobTitle`\n* Requests for PUT/POST [`/trunks/{trunkId}/trunkDevices/*`](#tag/Trunk-Devices) endpoints can include additional nullable fields in the body: `description`, `location`, `model` and `product`\n* Requests for PUT/POST [`/trunks/{trunkId}/trunkQueues/*`](#tag/Trunk-Queues) endpoints can include additional nullable fields in the body: `description`\n* Requests for PUT/POST [`/trunks/{trunkId}/trunkUsers/*`](#tag/Trunk-Users) endpoints can include additional nullable fields in the body: `department`, `description`, `jobTitle`, `location` and `manager`\n\n## 2020-07-07 - Unified Directory: Support for managing SIP trunk directory entries\n* You can now manage SIP devices, users and queues associated with your SIP Trunks.  Any devices, users or queues created via this API\n  will appear in the Internal company directory in the Spoke application. These endpoints are directly dialable from Spoke, and can optionally\n  be associated with a Spoke User, providing full integration between Spoke and your legacy PBX.\n\n  By integrating with the Unified Directory you can automate the process of synchronising the entries in your legacy phone system with Spoke.  Platform\n  specific integrations (e.g. Cisco UCM) will be available from Spoke Integration Partners, or you can use the following API endpoints directly:\n  * Added [`/trunks`](#tag/Trunks) endpoint. Lists all SIP Trunks in the organisation. Trunks must be created via the Spoke account portal and will required additional network configuration.\n  * Added [`/trunks/{trunkId}/trunkDevices/*`](#tag/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.\n  * Added [`/trunks/{trunkId}/trunkUsers/*`](#tag/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.\n  * Added [`/trunks/{trunkId}/trunkQueues/*`](#tag/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.\n\n## 2019-11-26 - New /users endpoint\n* Added [`/users`](#tag/Users) endpoint. Lists all Spoke users in the organisation.  This list is equivalent to the list of Users in Spoke application \"Internal\" directory view.\n  * The list includes each user's availability\n  * The availability state for a given user is close to real time (lag 1-5 seconds).\n  * Details about Availability statuses and reason fields are included in the API response.\n* Current limitations\n  * This endpoint currently supports `GET /users` and `GET /users/{id}`. Future versions may support `PUT` methods to enable external control of availability\n  * The following properties will be exposed in a future version of this API : `extensions`, `phone_numbers`, `teams`\n\n## 2019-11-12 - Added extra fields to Call object to simplify CRM integration\n* Responses from the [`/calls`](#tag/Calls) endpoints now include additional fields:\n  * `isInternal`: If this field is true then the call was between internal Spoke Users only.\n  * `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.\n  * `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.\n* 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:\n  * `header`: A Short header summarising the call content. This is dependent on call direction, and what is known about the caller and callee.\n  * `contactNumberDescription`: A short description of the `contactNumber` (e.g \"Called in from +64218880000\").\n  * `companyNumberDescription`: A short description of the `companyNumber` (e.g. \"Call in to +6498880000\").\n  * `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\")\n* __IMPORTANT CHANGE__\n  * The `initiator` and `recipient` fields on the `Call` object have been deprecated in favour of `contactNumber` and `companyNumber`.\n  * This change should simplify integrations with external CRM systems as contactNumber will always represent the phone number of the external call party.\n  * These fields will be removed completely in a future release. Please migrate to the new fields.\n\n## 2019-10-08 - Added Notes to Call object\n* Responses from the [`/calls`](#tag/Calls) endpoints now include a `notes` type.\n  * Notes can be recorded at any time after the call ends\n  * A call can have multiple sets of notes recorded against it\n* Added a section in the API guide relating to [date/time and timestamp](#section/API-Guide/DateTime-Values) fields.\n\n## 2019-09-30 - New /calls endpoint\n* Added [`/calls`](#tag/Calls) endpoint:\n  * Provides the ability to retrieve calls that have been received or made by the organisation\n  * Calls can be queried by time range (`before`, `since` parameters) and/or last modified timestamp (`modified` parameter).\n  * Only returns calls that have ended (where all parties have hung up), in-flight calls are not included in the response at this time\n* __IMPORTANT CHANGE__\n  * Deprecated singular endpoints (`/phonebook` & `/phonebook/{id}/contact`) in favour of plural endpoints.\n  * All future collection endpoints will be plural in form ([`/phonebooks`](#tag/Phonebooks), [`/phonebooks/{id}`](#tag/Phonebooks/paths/~1phonebooks~1{id}/get), [`/calls`](#tag/Calls/paths/~1calls/get))\n  * The current singular endpoints continue to function but will be removed in a future release.  Please migrate to the new endpoints.\n  * The deprecated endpoints are marked in the Deprecated section of this document\n* __BREAKING CHANGE__\n  * Replaced `nextContact` query string parameter with `next` parameter as the standard parameter for response result set paging across all endpoints\n\n## 2019-07-31 - Initial Release\n* 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:\n  * A Phonebook is a collection of Contact(s), where a Contact is a record containing a name/phone number(s)/email addresses.\n  * You can batch upload to a Phonebook (which replaces the entire contents) or upsert a single Contact into a Phonebook.\n  * We support multiple external phonebooks, this allows our customers some flexibility, primarily if they are using our CSV upload functionality and have data.\n* Supports authentication via OAuth 2.0 Client Credentials Flow\n","termsOfService":"https://www.getspoke.com/legal/terms-of-use","title":"Spoke API Reference","x-logo":{"url":"./img/spoke_logo.png"}},"paths":{"/calls":{"get":{"summary":"List calls","description":"Lists your calls. You can restrict the result set using any of the following parameters:\n\n* `since` (unix timestamp):  Only return calls that started on or after the given timestamp.\n* `before` (unix timestamp): Only return calls that started on or before the given timestamp.\n* `modified` (unix timestamp): Only return calls that have been modified since the given timestamp. We recommend you use this parameter if you are regularly polling the API to retrieve the latest calls. The modified timestamp will be updated if a user stores additional notes against a call after the call has ended.\n* `includeActive`: Return all calls, active and ended. By default, this is false and only ended calls are returned.\n\nThese parameters may be used in combination (i.e. get all calls between `since` and `before` that have been updated after `modified`).\n\nThis endpoint supports paging. By default the API will return 100 calls, configurable up to a maximum of 1000 calls at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as tne `next` parameter in the query string to retrieve the next page of results.\n","operationId":"callGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"since","in":"query","description":"Get all matching created since (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/since"}},{"name":"before","in":"query","description":"Get all matching records created before (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/before"}},{"name":"modified","in":"query","description":"Get all records modified since (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/modified"}},{"name":"includeActive","in":"query","description":"Set this value as true to get all calls, active and ended. Set it as false to get only ended calls. Defaults to false.","required":false,"schema":{"$ref":"#/components/schemas/includeActive"}},{"name":"includeRecordingUrl","in":"query","description":"Set this value as true to get recording URLs for call recordings, voicemail and highlights. Set it as false to omit the URLs. Defaults to true.","required":false,"schema":{"$ref":"#/components/schemas/includeRecordingUrl"}},{"name":"sortOrder","in":"query","description":"The order of results returned when listing calls.\n\nOne of the following values:\n  - ***ascending***: Sort results in ascending order (oldest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n  - ***descending***: Sort results in descending order (latest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n\nBy default, the results will be sorted in `ascending` order using the `lastModifiedTimestamp` field.\n","required":false,"schema":{"$ref":"#/components/schemas/sortOrder"}},{"name":"contactNumber","in":"query","description":"Only return calls where the `contactNumber` field matches the parameter value. The parameter value must be provided in +E164 format.\n\nUse this parameter to find calls for a given external party such as a customer.\n","required":false,"schema":{"$ref":"#/components/schemas/contactNumber"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Calls"],"responses":{"200":{"description":"Calls","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Calls"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/calls/{id}":{"get":{"summary":"Get a call","description":"Get a call resource by ID.\n","operationId":"callGetById","parameters":[{"name":"id","in":"path","description":"The call ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"includeRecordingUrl","in":"query","description":"Set this value as true to get recording URLs for call recordings, voicemail and highlights. Set it as false to omit the URLs. Defaults to true.","required":false,"schema":{"$ref":"#/components/schemas/includeRecordingUrl"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Calls"],"responses":{"200":{"description":"Call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Call"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/calls/{id}/recordings/{recordingId}":{"get":{"summary":"Get a call recording","description":"Get a call recording recource by ID\n","operationId":"recordingGetById","parameters":[{"name":"id","in":"path","description":"The call ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"recordingId","in":"path","description":"The call recording ID","required":true,"schema":{"$ref":"#/components/schemas/recordingId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Calls"],"responses":{"200":{"description":"Call Recording","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Recording"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a call recording","description":"Delete the specified call recording of a call\n","operationId":"recordingDeleteById","parameters":[{"name":"id","in":"path","description":"The call ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"recordingId","in":"path","description":"The call recording ID","required":true,"schema":{"$ref":"#/components/schemas/recordingId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Calls"],"responses":{"204":{"description":"Successfully deleted the call recording","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/calls/{id}/contentAnalysis":{"get":{"summary":"List a call's content analysis data","description":"Lists your content analysis data for a specific Spoke call ID. Only content analysis data with status `succeeded` are included.\n\nYou can restrict the result set using the `artifact` parameter to only return content analysis data that contain a specific artifact schema name.\n\nThis endpoint supports paging. By default the API will return content analysis items, configurable up to a maximum. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"contentAnalysisGetByCallId","parameters":[{"name":"id","in":"path","description":"The call ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 5, maximum is 10","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"artifact","in":"query","description":"Only return content analysis data that contain a specific artifact schema name","required":false,"schema":{"$ref":"#/components/schemas/artifact"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Calls"],"responses":{"200":{"description":"List of content analysis data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetContentAnalysisResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/conversationMessages":{"post":{"summary":"Send a new conversation message","description":"Sends a new SMS or Group MMS message to one or more contacts. The message is associated with a conversation owned by either a Spoke Team or a Spoke Member, identified via the `sender` field. If a conversation between the company number and the contact address(es) exists, the message will be added to it; otherwise a new conversation is created. Note that as a result of this request being successfully processed, a `conversation.message.created` webhook event will be generated.\n","operationId":"developerApiConversationMessagePost","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Conversations"],"requestBody":{"description":"Information about the message","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConversationMessageBody"}}}},"responses":{"201":{"description":"Successfully sent the message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConversationMessageResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/directory":{"get":{"summary":"List or search the unified Spoke directory","description":"Lists or finds directory entries. All search parameters are optional.\n\nIf no parameters are provided then a paged list of directory entries, ordered alphabetically by `displayName` will be returned.\n","operationId":"directoryGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"extension","in":"query","description":"Returns directory filtered by extension number. Exact match only.\n\nThis parameter is incompatible with `ivrKey` and `phoneNumber`\n","required":false,"schema":{"$ref":"#/components/schemas/extension"}},{"name":"phoneNumber","in":"query","description":"Returns directory filtered by phone number. Exact match only. The result set will return the directory entry with the assigned phone number.\n\nThis parameter is incompatible with `extension` and `ivrKey`\n","required":false,"schema":{"$ref":"#/components/schemas/phoneNumber"}},{"name":"ivrKey","in":"query","description":"Returns directory filtered by IVR key. Exact match only.\n\nThis parameter is incompatible with `extension` and `phoneNumber`\n","required":false,"schema":{"$ref":"#/components/schemas/ivrKey"}},{"name":"includeSuspendedUsers","in":"query","description":"Return all directory entries, including suspended users.\n\nBy default, this flag is false and suspended users are excluded from the response.\n","required":false,"schema":{"$ref":"#/components/schemas/includeSuspendedUsers"}},{"name":"includeHiddenCallGroups","in":"query","description":"If `true`, the result set will include all call groups (teams) irrespective of a group's `isHidden` flag.\n\nIf `false`, the result set will only include call groups (teams) that have `isHidden` set to `false`.\n\nBy default, this flag is false and hidden call groups are excluded from the response.\n","required":false,"schema":{"$ref":"#/components/schemas/includeHiddenCallGroups"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Directory"],"responses":{"200":{"description":"Directory","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectoryResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/directory/{entryId}":{"get":{"summary":"Get a directory entry","description":"Retrieves a directory entry\n","operationId":"directoryGetById","parameters":[{"name":"entryId","in":"path","description":"The directory entry ID","required":true,"schema":{"$ref":"#/components/schemas/entryId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Directory"],"responses":{"200":{"description":"Directory Entry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectoryEntry"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/messages":{"post":{"summary":"Send a new SMS message","description":"**DEPRECATED**: This endpoint has been deprecated and will be removed in a future version of the API. Please use the [`POST /conversationMessages`](#tag/Conversations/operation/developerApiConversationMessagePost) endpoint instead.\n\nSends a new SMS message to a number on behalf of a Spoke User. The Spoke user must have an SMS enabled DDI. If a conversation between the specified user and the number exists, the message will automatically be added to the conversation. If a conversation does not exist, a new one will be created containing the message. Note that as a result of this request being successfully processed, a conversation.message.created webhook event will be generated.\n","operationId":"developerApiMessagesPost","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Conversations"],"deprecated":true,"requestBody":{"description":"Information about the message","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMessageBody"}}}},"responses":{"201":{"description":"Successfully sent the message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMessageResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/phonebook":{"get":{"parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"next","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}}]},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/phonebApiGaItnfBdEA3c7n"}}},"required":true},"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"}},"/phonebook/{id}":{"get":{"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"next","in":"query","required":false,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"},"put":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/phonebApiGaQcZ2T97dZR2d"}}},"required":true},"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"},"delete":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"}},"/phonebook/{id}/contact":{"put":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/phonebApiGaYkLsHnxDOVDL"}}},"required":true},"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"}},"/phonebook/{id}/contact/{contactId}":{"put":{"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/phonebApiGaA6mYf9cRNWhs"}}},"required":true},"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"},"delete":{"parameters":[{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-amazon-apigateway-request-validator":"phonebook-dev | Validate request body and querystring parameters"}},"/phonebooks":{"get":{"summary":"List phonebooks with contacts","description":"List the phonebooks and their contacts.\nNot all contacts may be returned. The `limit` query parameter applies to the total number of contacts in the result set, not the number returned in each phonebook.\n\nIf `excludeEmpty` is set to true and the `search` parameter is not provided, only phonebooks with contacts are returned. By default, the `excludeEmpty` parameter is false and all phonebooks will be returned.\n","operationId":"phonebookGet","parameters":[{"name":"search","in":"query","description":"The search term for filtering contacts. Must have at least 3 characters if provided.","required":false,"schema":{"$ref":"#/components/schemas/search"}},{"name":"limit","in":"query","description":"The maximum number of contacts to return. Default to 100, maximum is 1000","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"excludeEmpty","in":"query","description":"Set this value as true to exclude phonebooks that do not contain any contacts. Set it as false to get all phonebooks. Defaults to false. This parameter is ignored if the `search` parameter is provided.","required":false,"schema":{"$ref":"#/components/schemas/excludeEmpty"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"responses":{"200":{"description":"Phonebooks and their contacts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhonebooksWithContacts"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Create phonebook with contacts","description":"Create a new phonebook and populates it with the provided contacts.","operationId":"phonebookPut","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"requestBody":{"description":"Information about the phonebook to be created","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePhonebookRequest"}}}},"responses":{"201":{"description":"Successfully created phonebook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Phonebook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/phonebooks/{id}":{"get":{"summary":"Get phonebook with contacts","description":"Retrieve the phonebook and its contacts.\nFor a large phonebook with number of contacts exceeding the limit, next contact ID is given for pagination.\n\nIf `id` is an email address of a user, then the user's personal phonebook will be retrieved.\n","operationId":"phonebookGetById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"search","in":"query","description":"The search term for filtering contacts. Must have at least 3 characters if provided.","required":false,"schema":{"$ref":"#/components/schemas/search"}},{"name":"limit","in":"query","description":"The maximum number of contacts to return. Default to 100, maximum is 1000","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"responses":{"200":{"description":"Phonebook with contacts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhonebookWithContacts"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update phonebook and its contacts","description":"Update an existing phonebook and replace its contacts with the provided contacts.","operationId":"phonebookPutById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"requestBody":{"description":"Information about the phonebook to be updated","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePhonebookRequest"}}}},"responses":{"200":{"description":"Successfully updated phonebook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Phonebook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete phonebook and its contacts","description":"Delete the specified phonebook and all of its contacts.\n\nIf `id` is an email address of a user, then the user's personal phonebook will be deleted.\n","operationId":"phonebookDelById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"responses":{"204":{"description":"Successfully deleted the phonebook","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/phonebooks/{id}/contacts":{"put":{"summary":"Add a new contact to a phonebook","description":"Add the given contact to an existing phonebook. Replace the contact if the given ID matches an existing once.\nOther contacts in the phonebook are not modified.\n\nIf `id` is an email address of a user, then the given contact will be added to the user's personal phonebook.\n","operationId":"contactPut","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Contacts"],"requestBody":{"description":"New contacts to add and required metadata","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOrUpdateContactRequest"}}}},"responses":{"201":{"description":"Successfully added contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/phonebooks/{id}/contacts/{contactId}":{"get":{"summary":"Get phonebook contact","description":"Retrieve the specified contact from an existing phonebook.\n\nIf `id` is an email address of a user, then the specified contact will be retrieved from the user's personal phonebook.\n","operationId":"contactGetById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"contactId","in":"path","description":"The contact ID","required":true,"schema":{"$ref":"#/components/schemas/contactId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Contacts"],"responses":{"200":{"description":"Phonebook contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update an existing contact","description":"Update an existing contact in a phonebook with the new data.\n\nIf `id` is an email address of a user, then the contact in the user's personal phonebook will be updated.\n","operationId":"contactPutById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"contactId","in":"path","description":"The contact ID","required":true,"schema":{"$ref":"#/components/schemas/contactId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Contacts"],"requestBody":{"description":"Information about the contact to be updated","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddOrUpdateContactRequest"}}}},"responses":{"200":{"description":"Successfully updated contact","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a contact","description":"Delete the specified contact from an existing phonebook.\n\nIf `id` is an email address of a user, then the contact will be deleted from the user's personal phonebook.\n","operationId":"contactDelById","parameters":[{"name":"id","in":"path","description":"The phonebook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"contactId","in":"path","description":"The contact ID","required":true,"schema":{"$ref":"#/components/schemas/contactId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Contacts"],"responses":{"204":{"description":"Successfully deleted the contact","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/phonebooks/{email}":{"put":{"summary":"Create or update a personal phonebook with contacts","description":"Create or update a personal phonebook. Personal phonebooks are owned by a user and are not shared with other users. If the user matching the email does not already have a personal phonebook, then it will be created.","operationId":"phonebookPutByEmail","parameters":[{"name":"email","in":"path","description":"The email of the user that the personal phonebook is owned by","required":true,"schema":{"$ref":"#/components/schemas/Email"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Phonebooks"],"requestBody":{"description":"Information about the personal phonebook to be created or updated","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePhonebookRequest"}}}},"responses":{"200":{"description":"Successfully updated phonebook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Phonebook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/teamMessages":{"post":{"summary":"Send a new Team SMS message","description":"**DEPRECATED**: This endpoint has been deprecated and will be removed in a future version of the API. Please use the [`POST /conversationMessages`](#tag/Conversations/operation/developerApiConversationMessagePost) endpoint instead.\n\nSends a new SMS message to a number on behalf of a Spoke Team.\nThe Spoke team must have an SMS enabled DDI. If a conversation between the specified team and the number exists, the message will automatically be added to the conversation.\nIf a conversation does not exist, a new one will be created containing the message. Note that as a result of this request being successfully processed, a conversation.message.created webhook event will be generated.\n","operationId":"developerApiTeamMessagesPost","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Conversations"],"deprecated":true,"requestBody":{"description":"Information about the message","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamMessageBody"}}}},"responses":{"201":{"description":"Successfully sent the message","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTeamMessageResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks":{"get":{"summary":"List trunks in your organisation","description":"Lists all trunks in your organisation.\n\nThis endpoint supports paging. By default the API will return 100 trunks, configurable up to a maximum of 1000 trunks at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"trunkGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunks"],"responses":{"200":{"description":"Trunks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunksResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}":{"get":{"summary":"Get a trunk","description":"Retrieve a trunk resource, and its data.\n","operationId":"trunkGetById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunks"],"responses":{"200":{"description":"Trunk","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Trunk"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkDevices":{"get":{"summary":"List trunk devices in a trunk","description":"Lists all trunk devices for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 devices, configurable up to a maximum of 1000 trunk's devices at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"trunkDeviceGet","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"externalId","in":"query","description":"The external ID of the trunk device","required":false,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"responses":{"200":{"description":"Trunk devices","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkDevicesResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"post":{"summary":"Add a new trunk device to a trunk","description":"Creates a new trunk device in the specified trunk.\n","operationId":"trunkDevicePost","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"requestBody":{"required":false,"description":"Information about the trunk device to be created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrunkDeviceBody"}}}},"responses":{"201":{"description":"Successfully created trunk device","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkDevice"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk device using external ID","description":"Update a trunk device in the specified trunk by its external ID.\n\nUpdating all trunk devices in the specified trunk is currently not supported.\n","operationId":"trunkDevicePut","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"requestBody":{"required":false,"description":"Information about the trunk device to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkDeviceByExternalIdBody"}}}},"responses":{"200":{"description":"Successfully updated trunk device","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkDevice"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk device using external ID.","description":"Delete a trunk device in the specified trunk.\n\nDeleting all trunk devices in the specified trunk is currently not supported.\n","operationId":"trunkDeviceDelete","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"externalId","in":"query","description":"The external ID of the trunk device","required":true,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"responses":{"204":{"description":"Successfully deleted trunk device","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}":{"get":{"summary":"Get a trunk device","description":"Retrieve a trunk device resource, and its data.\n","operationId":"trunkDeviceGetById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkDeviceId","in":"path","description":"The trunk's device ID","required":true,"schema":{"$ref":"#/components/schemas/trunkDeviceId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"responses":{"200":{"description":"Trunk device","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkDevice"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk device","description":"Update a trunk device in the specified trunk.\n","operationId":"trunkDevicePutById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkDeviceId","in":"path","description":"The trunk's device ID","required":true,"schema":{"$ref":"#/components/schemas/trunkDeviceId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"requestBody":{"required":false,"description":"Information about the trunk device to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkDeviceBody"}}}},"responses":{"200":{"description":"Successfully updated trunk device","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkDevice"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk device","description":"Delete a trunk device in the specified trunk.\n","operationId":"trunkDeviceDeleteById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkDeviceId","in":"path","description":"The trunk's device ID","required":true,"schema":{"$ref":"#/components/schemas/trunkDeviceId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Devices"],"responses":{"204":{"description":"Successfully deleted trunk device","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkQueues":{"get":{"summary":"List trunk queues in a trunk","description":"Lists all trunk queues for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 queues, configurable up to a maximum of 1000 trunk's queues at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"trunkQueueGet","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"externalId","in":"query","description":"The external ID of the trunk queue","required":false,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"responses":{"200":{"description":"Trunk queues","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkQueuesResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"post":{"summary":"Add a new trunk queue to a trunk","description":"Creates a new trunk queue in the specified trunk.\n","operationId":"trunkQueuePost","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"requestBody":{"required":false,"description":"Information about the trunk queue to be created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrunkQueueBody"}}}},"responses":{"201":{"description":"Successfully created trunk queue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkQueue"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk queue using external ID","description":"Update a trunk queue in the specified trunk by its external ID.\n\nUpdating all trunk queues in the specified trunk is currently not supported.\n","operationId":"trunkQueuePut","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"requestBody":{"required":false,"description":"Information about the trunk queue to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkQueueByExternalIdBody"}}}},"responses":{"200":{"description":"Successfully updated trunk queue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkQueue"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk queue using external ID.","description":"Delete a trunk queue in the specified trunk.\n\nDeleting all trunk queues in the specified trunk is currently not supported.\n","operationId":"trunkQueueDelete","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"externalId","in":"query","description":"The external ID of the trunk queue","required":true,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"responses":{"204":{"description":"Successfully deleted trunk queue","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkQueues/{trunkQueueId}":{"get":{"summary":"Get a trunk queue","description":"Retrieve a trunk queue resource, and its data.\n","operationId":"trunkQueueGetById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkQueueId","in":"path","description":"The trunk's queue ID","required":true,"schema":{"$ref":"#/components/schemas/trunkQueueId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"responses":{"200":{"description":"Trunk queue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkQueue"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk queue","description":"Update a trunk queue in the specified trunk.\n","operationId":"trunkQueuePutById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkQueueId","in":"path","description":"The trunk's queue ID","required":true,"schema":{"$ref":"#/components/schemas/trunkQueueId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"requestBody":{"required":false,"description":"Information about the trunk queue to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkQueueBody"}}}},"responses":{"200":{"description":"Successfully updated trunk queue","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkQueue"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk queue","description":"Delete a trunk queue in the specified trunk.\n","operationId":"trunkQueueDeleteById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkQueueId","in":"path","description":"The trunk's queue ID","required":true,"schema":{"$ref":"#/components/schemas/trunkQueueId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Queues"],"responses":{"204":{"description":"Successfully deleted trunk queue","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkUsers":{"get":{"summary":"List trunk users in a trunk","description":"Lists all trunk users for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 users, configurable up to a maximum of 1000 trunk's users at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"trunkUserGet","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"externalId","in":"query","description":"The external ID of the trunk user","required":false,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"responses":{"200":{"description":"Trunk users","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkUsersResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"post":{"summary":"Add a new trunk user to a trunk","description":"Creates a new trunk user in the specified trunk.\n","operationId":"trunkUserPost","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"requestBody":{"required":false,"description":"Information about the trunk user to be created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTrunkUserBody"}}}},"responses":{"201":{"description":"Successfully created trunk user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkUser"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk user using external ID","description":"Update a trunk user in the specified trunk by its external ID.\n\nUpdating all trunk users in the specified trunk is currently not supported.\n","operationId":"trunkUserPut","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"requestBody":{"required":false,"description":"Information about the trunk user to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkUserByExternalIdBody"}}}},"responses":{"200":{"description":"Successfully updated trunk user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkUser"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk user using external ID.","description":"Delete a trunk user in the specified trunk.\n\nDeleting all trunk users in the specified trunk is currently not supported.\n","operationId":"trunkUserDelete","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"externalId","in":"query","description":"The external ID of the trunk user","required":true,"schema":{"$ref":"#/components/schemas/externalId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"responses":{"204":{"description":"Successfully deleted trunk user","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/trunks/{trunkId}/trunkUsers/{trunkUserId}":{"get":{"summary":"Get a trunk user","description":"Retrieve a trunk user resource, and its data.\n","operationId":"trunkUserGetById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkUserId","in":"path","description":"The trunk's user ID","required":true,"schema":{"$ref":"#/components/schemas/trunkUserId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"responses":{"200":{"description":"Trunk user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkUser"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update a trunk user","description":"Update a trunk user in the specified trunk.\n","operationId":"trunkUserPutById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkUserId","in":"path","description":"The trunk's user ID","required":true,"schema":{"$ref":"#/components/schemas/trunkUserId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"requestBody":{"required":false,"description":"Information about the trunk user to be updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTrunkUserBody"}}}},"responses":{"200":{"description":"Successfully updated trunk user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrunkUser"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a trunk user","description":"Delete a trunk user in the specified trunk.\n","operationId":"trunkUserDeleteById","parameters":[{"name":"trunkId","in":"path","description":"The trunk ID","required":true,"schema":{"$ref":"#/components/schemas/trunkId"}},{"name":"trunkUserId","in":"path","description":"The trunk's user ID","required":true,"schema":{"$ref":"#/components/schemas/trunkUserId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Trunk Users"],"responses":{"204":{"description":"Successfully deleted trunk user","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/users":{"get":{"summary":"List users with availability","description":"This API endpoint lists all users in your organisation and their current availability.\n","operationId":"userGet","parameters":[{"name":"email","in":"query","description":"Filter users by email address. Exact match only. If there is a user with the given email address, the response will contain one user with that email address.\n","required":false,"schema":{"$ref":"#/components/schemas/email"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Users"],"responses":{"200":{"description":"Users","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersWithAvailability"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/users/{id}":{"get":{"summary":"Get a user","description":"Retrieve a user resource, and its data.\n","operationId":"userGetById","parameters":[{"name":"id","in":"path","description":"The user ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Users"],"responses":{"200":{"description":"User","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserWithAvailability"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/webhooks":{"get":{"summary":"List webhooks","description":"List all webhooks in your organisation.\n\nThis endpoint supports paging. By default the API will return 100 webhooks, configurable up to a maximum of 1000 webhooks at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"webhookGet","parameters":[{"name":"limit","in":"query","description":"The maximum number of webhooks to return. Default to 100, maximum is 1000","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Webhooks"],"responses":{"200":{"description":"Webhooks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetWebhooksResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"post":{"summary":"Create a webhook","description":"Create a new webhook.\n\nThe total number of webhooks cannot exceed your account level limit. By default each account can create up to 10 webhooks. Please contact support with your specific use case to increase the limit.\n","operationId":"webhookPost","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Webhooks"],"requestBody":{"description":"Information about the webhook to be created","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequestBody"}}}},"responses":{"201":{"description":"Successfully created webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/webhooks/{id}":{"get":{"summary":"Get webhook","description":"Retrieve the webhook.","operationId":"webhookGetById","parameters":[{"name":"id","in":"path","description":"The webhook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Webhooks"],"responses":{"200":{"description":"Webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"put":{"summary":"Update webhook","description":"Update an existing webhook.","operationId":"webhookPutById","parameters":[{"name":"id","in":"path","description":"The webhook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Webhooks"],"requestBody":{"description":"Information about the webhook to be updated","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequestBody"}}}},"responses":{"200":{"description":"Successfully updated webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete webhook","description":"Delete the specified webhook.","operationId":"webhookDelById","parameters":[{"name":"id","in":"path","description":"The webhook ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Webhooks"],"responses":{"204":{"description":"Successfully deleted the webhook","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/transcripts":{"get":{"summary":"List transcripts","description":"Lists your transcripts. You can restrict the result set using any of the following parameters:\n\n* `since` (unix timestamp): Only return transcripts that were created after the given timestamp.\n* `before` (unix timestamp): Only return transcripts that were created before the given timestamp.\n* `sourceId`: Only return transcripts that were created from the given source.\n* `sourceContextId`: Only return transcripts that were created from the given source's context.\n\nThese parameters may be used in combination (i.e. get all transcripts between `since` and `before` that were created from a specific source).\n\nThis endpoint supports paging. By default the API will return 100 transcripts, configurable up to a maximum of 1000 transcripts at a time. If the result from a previous transcript includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"transcriptGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"since","in":"query","description":"Get all matching objects created since (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/since"}},{"name":"before","in":"query","description":"Get all matching objects created before (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/before"}},{"name":"sourceId","in":"query","description":"Only return transcripts where the `source.id` field matches the parameter value","required":false,"schema":{"$ref":"#/components/schemas/sourceId"}},{"name":"sourceContextId","in":"query","description":"Only return transcripts where the `source.contextId` field matches the parameter value","required":false,"schema":{"$ref":"#/components/schemas/sourceContextId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Transcripts"],"responses":{"200":{"description":"Transcripts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptsResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/transcripts/{id}":{"get":{"summary":"Get a transcript","description":"Get a transcript resource by ID.\n","operationId":"transcriptGetById","parameters":[{"name":"id","in":"path","description":"The transcript ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Transcripts"],"responses":{"200":{"description":"Transcript","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a transcript","description":"Delete a transcript resource by ID.\n","operationId":"transcriptDeleteById","parameters":[{"name":"id","in":"path","description":"The transcript ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Transcripts"],"responses":{"204":{"description":"Successfully deleted the transcript","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/transcripts/{id}/segments":{"get":{"summary":"Get transcript segments by transcript ID","description":"Get associated transcript segments of a transcript by its ID.\n","operationId":"transcriptGetSegmentsByTranscriptId","parameters":[{"name":"id","in":"path","description":"The transcript ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Transcripts"],"responses":{"200":{"description":"Transcript segments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscriptSegmentsResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/contentAnalysis/{id}":{"get":{"summary":"Get a content analysis","description":"Get a content analysis resource by ID.\n","operationId":"contentAnalysisGetById","parameters":[{"name":"id","in":"path","description":"The content analysis ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Content Analysis"],"responses":{"200":{"description":"Content analysis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentAnalysis"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Delete a content analysis","description":"Delete a content analysis by ID. This will abort the content analysis and delete its associated data.\n","operationId":"contentAnalysisDelById","parameters":[{"name":"id","in":"path","description":"The content analysis ID","required":true,"schema":{"$ref":"#/components/schemas/id"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Content Analysis"],"responses":{"204":{"description":"Successfully deleted the content analysis","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/contentAnalysis":{"get":{"summary":"List content analysis data","description":"Lists your content analysis data. Only content analysis data with status `succeeded` are included.\n\nYou can restrict the result set using any of the following parameters:\n\n* `since` (unix timestamp in milliseconds): Only return content analysis data where the first recording or transcript started on or after the given timestamp.\n* `before` (unix timestamp in milliseconds): Only return content analysis data where the first recording or transcript started on or before the given timestamp.\n* `sourceId`: Only return content analysis data for a specific source (e.g., a Spoke call ID).\n* `participantId`: Only return content analysis data where a specific participant ID is present.\n* `contactNumber`: Only return content analysis data where a specific contact participant phone number is present.\n* `artifact`: Only return content analysis data that contain a specific artifact schema name.\n\nThese parameters may be used in combination.\n\nThis endpoint supports paging. By default the API will return 5 content analysis items, configurable up to a maximum of 10 at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n\nResults are sorted by the first recording or transcript's started timestamp in descending order (newest first).\n","operationId":"contentAnalysisGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 5, maximum is 10","required":false,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"since","in":"query","description":"Get all content analysis data where the first recording or transcript started after this time (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/since"}},{"name":"before","in":"query","description":"Get all content analysis data where the first recording or transcript started before this time (UNIX timestamp)","required":false,"schema":{"$ref":"#/components/schemas/before"}},{"name":"sourceId","in":"query","description":"Get all content analysis data where the source id from the request matches this parameter","required":false,"schema":{"$ref":"#/components/schemas/sourceId"}},{"name":"participantId","in":"query","description":"Get all content analysis data which contains a participant in the request with this id","required":false,"schema":{"$ref":"#/components/schemas/participantId"}},{"name":"contactNumber","in":"query","description":"Get all content analysis data which contains a participant in the request with this numberE164. This parameter is ignored if the `participantId` parameter is provided","required":false,"schema":{"$ref":"#/components/schemas/contactNumber"}},{"name":"artifact","in":"query","description":"Get all content analysis data which contains an artifact of the given schema name, e.g. \"generalSummary\"","required":false,"schema":{"$ref":"#/components/schemas/artifact"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Content Analysis"],"responses":{"200":{"description":"List of content analysis data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetContentAnalysisResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"post":{"summary":"Create a new content analysis","description":"Submit a new request to analyze the provided content.\n\n> Note: Usage of this API requires an entitlement to be enabled on your Spoke Account. Contact your Spoke Account Manager for more information.\n","operationId":"contentAnalysisPost","parameters":[{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Content Analysis"],"requestBody":{"description":"The payload containing the content and related information required to be processed and analyzed.","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentAnalysisRequest"}}}},"responses":{"202":{"description":"The queued content analysis","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueuedContentAnalysis"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/teams":{"get":{"summary":"List teams","description":"Lists the teams in your organisation.\n\nThis endpoint supports paging. By default the API will return 100 teams, configurable up to a maximum of 1000 teams at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","operationId":"teamGet","parameters":[{"name":"next","in":"query","description":"Optional next token for object pagination","required":false,"schema":{"$ref":"#/components/schemas/next"}},{"name":"limit","in":"query","description":"The number of objects fetched per request. Default to 100, maximum is 1000","required":true,"schema":{"$ref":"#/components/schemas/limit"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Teams"],"responses":{"200":{"description":"Teams","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamsResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}},"/teams/{teamId}/users/{userId}":{"put":{"summary":"Add a user to a team","description":"Add a user to the specified team, or update the user's offer priority if they are already a member.\n","operationId":"teamUserPut","parameters":[{"name":"teamId","in":"path","description":"The team ID","required":true,"schema":{"$ref":"#/components/schemas/teamId"}},{"name":"userId","in":"path","description":"The user ID","required":true,"schema":{"$ref":"#/components/schemas/userId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Teams"],"requestBody":{"required":false,"description":"Information about the user to be added to the team","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertTeamUserBody"}}}},"responses":{"202":{"description":"The user has been added to the team","headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}},"delete":{"summary":"Remove a user from a team","description":"Remove a user from the specified team.\n","operationId":"teamUserDelete","parameters":[{"name":"teamId","in":"path","description":"The team ID","required":true,"schema":{"$ref":"#/components/schemas/teamId"}},{"name":"userId","in":"path","description":"The user ID","required":true,"schema":{"$ref":"#/components/schemas/userId"}},{"name":"Authorization","in":"header","description":"Authorization header bearing the access token","required":true,"schema":{"$ref":"#/components/schemas/Authorization"}}],"tags":["Teams"],"responses":{"204":{"description":"Successfully removed the user from the team","content":{},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"400":{"description":"Bad request","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}},"application/json":{"schema":{"$ref":"#/components/schemas/ApiGatewayValidationErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"401":{"description":"Unauthorized","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"403":{"description":"Forbidden","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"404":{"description":"Not found","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"$ref":"#/components/schemas/SpokeMiddlewareErrorResponse"}}},"headers":{"Access-Control-Allow-Origin":{"description":"The Access-Control-Allow-Origin response header indicates whether the response can be shared with requesting code from the given [origin](https://developer.mozilla.org/en-US/docs/Glossary/Origin). - [MDN Link](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)","schema":{"$ref":"#/components/schemas/Access-Control-Allow-Origin"}}}}}}}},"x-amazon-apigateway-documentation":{"version":"472098cb2f53671f424610986f2b60309597d10a","createdDate":"2024-02-25T22:06:33Z","documentationParts":[{"location":{"type":"METHOD","path":"/calls/{id}","method":"GET"},"properties":{"description":"Get a call resource by ID.\n","summary":"Get Call by ID","tags":["Calls"],"serverless-service":"call"}},{"location":{"type":"METHOD","path":"/calls","method":"GET"},"properties":{"description":"Lists your calls. You can restrict the result set using any of the following parameters:\n\n* `since` (unix timestamp):  Only return calls that started on or after the given timestamp.\n* `before` (unix timestamp): Only return calls that started on or before the given timestamp.\n* `modified` (unix timestamp): Only return calls that have been modified since the given timestamp. We recommend you use this parameter if you are regularly polling the API to retrieve the latest calls. The modified timestamp will be updated if a user stores additional notes against a call after the call has ended.\n* `includeActive`: Return all calls, active and ended. By default, this is false and only ended calls are returned.\n\nThese parameters may be used in combination (i.e. get all calls between `since` and `before` that have been updated after `modified`).\n\nThis endpoint supports paging. By default the API will return 100 calls, configurable up to a maximum of 1000 calls at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as tne `next` parameter in the query string to retrieve the next page of results.\n","summary":"List calls","tags":["Calls"],"serverless-service":"call"}},{"location":{"type":"METHOD","path":"/directory/{entryId}","method":"GET"},"properties":{"description":"Retrieves a directory entry\n","summary":"Get a directory entry","tags":["Directory"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/directory","method":"GET"},"properties":{"description":"Lists or finds directory entries. All search parameters are optional.\n\nIf no parameters are provided then a paged list of directory entries, ordered alphabetically by `displayName` will be returned.\n","summary":"List or search the unified Spoke directory","tags":["Directory"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/messages","method":"POST"},"properties":{"description":"Sends a new SMS message to a number on behalf of a Spoke User. The Spoke user must have an SMS enabled DDI. If a conversation between the specified user and the number exists, the message will automatically be added to the conversation. If a conversation does not exist, a new one will be created containing the message. Note that as a result of this request being successfully processed, a conversation.message.created webhook event will be generated.\n","summary":"Send a new SMS message","tags":["Conversations"],"serverless-service":"conversation"}},{"location":{"type":"METHOD","path":"/teamMessages","method":"POST"},"properties":{"description":"Sends a new SMS message to a number on behalf of a Spoke Team.\nThe Spoke team must have an SMS enabled DDI. If a conversation between the specified team and the number exists, the message will automatically be added to the conversation.\nIf a conversation does not exist, a new one will be created containing the message. Note that as a result of this request being successfully processed, a conversation.message.created webhook event will be generated.\n","summary":"Send a new Team SMS message","tags":["Conversations"],"serverless-service":"conversation"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE"},"properties":{"description":"Delete a trunk device in the specified trunk.\n","summary":"Delete a trunk device","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET"},"properties":{"description":"Retrieve a trunk device resource, and its data.\n","summary":"Get a trunk device","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT"},"properties":{"description":"Update a trunk device in the specified trunk.\n","summary":"Update a trunk device","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE"},"properties":{"description":"Delete a trunk device in the specified trunk.\n\nDeleting all trunk devices in the specified trunk is currently not supported.\n","summary":"Delete a trunk device using external ID.","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices","method":"GET"},"properties":{"description":"Lists all trunk devices for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 devices, configurable up to a maximum of 1000 trunk's devices at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","summary":"List trunk devices in a trunk","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices","method":"POST"},"properties":{"description":"Creates a new trunk device in the specified trunk.\n","summary":"Add a new trunk device to a trunk","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkDevices","method":"PUT"},"properties":{"description":"Update a trunk device in the specified trunk by its external ID.\n\nUpdating all trunk devices in the specified trunk is currently not supported.\n","summary":"Update a trunk device using external ID","tags":["Trunk Devices"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE"},"properties":{"description":"Delete a trunk queue in the specified trunk.\n","summary":"Delete a trunk queue","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET"},"properties":{"description":"Retrieve a trunk queue resource, and its data.\n","summary":"Get a trunk queue","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT"},"properties":{"description":"Update a trunk queue in the specified trunk.\n","summary":"Update a trunk queue","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE"},"properties":{"description":"Delete a trunk queue in the specified trunk.\n\nDeleting all trunk queues in the specified trunk is currently not supported.\n","summary":"Delete a trunk queue using external ID.","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues","method":"GET"},"properties":{"description":"Lists all trunk queues for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 queues, configurable up to a maximum of 1000 trunk's queues at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","summary":"List trunk queues in a trunk","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues","method":"POST"},"properties":{"description":"Creates a new trunk queue in the specified trunk.\n","summary":"Add a new trunk queue to a trunk","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkQueues","method":"PUT"},"properties":{"description":"Update a trunk queue in the specified trunk by its external ID.\n\nUpdating all trunk queues in the specified trunk is currently not supported.\n","summary":"Update a trunk queue using external ID","tags":["Trunk Queues"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE"},"properties":{"description":"Delete a trunk user in the specified trunk.\n","summary":"Delete a trunk user","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET"},"properties":{"description":"Retrieve a trunk user resource, and its data.\n","summary":"Get a trunk user","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT"},"properties":{"description":"Update a trunk user in the specified trunk.\n","summary":"Update a trunk user","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE"},"properties":{"description":"Delete a trunk user in the specified trunk.\n\nDeleting all trunk users in the specified trunk is currently not supported.\n","summary":"Delete a trunk user using external ID.","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers","method":"GET"},"properties":{"description":"Lists all trunk users for a given trunk.\n\nThis endpoint supports paging. By default the API will return 100 users, configurable up to a maximum of 1000 trunk's users at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","summary":"List trunk users in a trunk","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers","method":"POST"},"properties":{"description":"Creates a new trunk user in the specified trunk.\n","summary":"Add a new trunk user to a trunk","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}/trunkUsers","method":"PUT"},"properties":{"description":"Update a trunk user in the specified trunk by its external ID.\n\nUpdating all trunk users in the specified trunk is currently not supported.\n","summary":"Update a trunk user using external ID","tags":["Trunk Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks/{trunkId}","method":"GET"},"properties":{"description":"Retrieve a trunk resource, and its data.\n","summary":"Get a trunk","tags":["Trunks"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/trunks","method":"GET"},"properties":{"description":"Lists all trunks in your organisation.\n\nThis endpoint supports paging. By default the API will return 100 trunks, configurable up to a maximum of 1000 trunks at a time. If the result from a previous call includes a `next` value in the result set you can use the value returned as the `next` parameter in the query string to retrieve the next page of results.\n","summary":"List trunks in your organisation","tags":["Trunks"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/users/{id}","method":"GET"},"properties":{"description":"Retrieve a user resource, and its data.\n","summary":"Get a user","tags":["Users"],"serverless-service":"directory"}},{"location":{"type":"METHOD","path":"/users","method":"GET"},"properties":{"description":"This API endpoint lists all users in your organisation and their current availability.\n","summary":"List users with availability","tags":["Users"],"serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/calls/{id}","method":"GET","name":"id"},"properties":{"description":"The call ID","serverless-service":"call"}},{"location":{"type":"PATH_PARAMETER","path":"/users/{id}","method":"GET","name":"id"},"properties":{"description":"The user ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","name":"trunkDeviceId"},"properties":{"description":"The trunk's device ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","name":"trunkDeviceId"},"properties":{"description":"The trunk's device ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","name":"trunkDeviceId"},"properties":{"description":"The trunk's device ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"POST","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"POST","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"POST","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}","method":"GET","name":"trunkId"},"properties":{"description":"The trunk ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","name":"trunkQueueId"},"properties":{"description":"The trunk's queue ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","name":"trunkQueueId"},"properties":{"description":"The trunk's queue ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","name":"trunkQueueId"},"properties":{"description":"The trunk's queue ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","name":"trunkUserId"},"properties":{"description":"The trunk's user ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","name":"trunkUserId"},"properties":{"description":"The trunk's user ID","serverless-service":"directory"}},{"location":{"type":"PATH_PARAMETER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","name":"trunkUserId"},"properties":{"description":"The trunk's user ID","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"before"},"properties":{"description":"Get all matching records created before (UNIX timestamp)","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"contactNumber"},"properties":{"description":"Only return calls where the `contactNumber` field matches the parameter value. The parameter value must be provided in +E164 format.\n\nUse this parameter to find calls for a given external party such as a customer.\n","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"extension"},"properties":{"description":"Returns directory filtered by extension number. Exact match only.\n\nThis parameter is incompatible with `ivrKey` and `phoneNumber`\n","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","name":"externalId"},"properties":{"description":"The external ID of the trunk device","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"GET","name":"externalId"},"properties":{"description":"The external ID of the trunk device","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","name":"externalId"},"properties":{"description":"The external ID of the trunk queue","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"GET","name":"externalId"},"properties":{"description":"The external ID of the trunk queue","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","name":"externalId"},"properties":{"description":"The external ID of the trunk user","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"GET","name":"externalId"},"properties":{"description":"The external ID of the trunk user","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"includeActive"},"properties":{"description":"Set this value as true to get all calls, active and ended. Set it as false to get only ended calls. Defaults to false.","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"includeHiddenCallGroups"},"properties":{"description":"If `true`, the result set will include all call groups (teams) irrespective of a group's `isHidden` flag.\n\nIf `false`, the result set will only include call groups (teams) that have `isHidden` set to `false`.\n\nBy default, this flag is false and hidden call groups are excluded from the response.\n","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls/{id}","method":"GET","name":"includeRecordingUrl"},"properties":{"description":"Set this value as true to get recording URLs for call recordings, voicemail and highlights. Set it as false to omit the URLs. Defaults to true.","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"includeRecordingUrl"},"properties":{"description":"Set this value as true to get recording URLs for call recordings, voicemail and highlights. Set it as false to omit the URLs. Defaults to true.","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"includeSuspendedUsers"},"properties":{"description":"Return all directory entries, including suspended users.\n\nBy default, this flag is false and suspended users are excluded from the response.\n","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"ivrKey"},"properties":{"description":"Returns directory filtered by IVR key. Exact match only.\n\nThis parameter is incompatible with `extension` and `phoneNumber`\n","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks","method":"GET","name":"limit"},"properties":{"description":"The number of objects fetched per request. Default to 100, maximum is 1000","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"modified"},"properties":{"description":"Get all records modified since (UNIX timestamp)","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkDevices","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkQueues","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks/{trunkId}/trunkUsers","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/trunks","method":"GET","name":"next"},"properties":{"description":"Pagination for list of objects","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/directory","method":"GET","name":"phoneNumber"},"properties":{"description":"Returns directory filtered by phone number. Exact match only. The result set will return the directory entry with the assigned phone number.\n\nThis parameter is incompatible with `extension` and `ivrKey`\n","serverless-service":"directory"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"since"},"properties":{"description":"Get all matching created since (UNIX timestamp)","serverless-service":"call"}},{"location":{"type":"QUERY_PARAMETER","path":"/calls","method":"GET","name":"sortOrder"},"properties":{"description":"The order of results returned when listing calls.\n\nOne of the following values:\n  - ***ascending***: Sort results in ascending order (oldest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n  - ***descending***: Sort results in descending order (latest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n\nBy default, the results will be sorted in `ascending` order using the `lastModifiedTimestamp` field.\n","serverless-service":"call"}},{"location":{"type":"REQUEST_BODY","path":"/messages","method":"POST"},"properties":{"description":"Information about the message","serverless-service":"conversation"}},{"location":{"type":"REQUEST_BODY","path":"/teamMessages","method":"POST"},"properties":{"description":"Information about the message","serverless-service":"conversation"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT"},"properties":{"description":"Information about the trunk device to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkDevices","method":"POST"},"properties":{"description":"Information about the trunk device to be created","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkDevices","method":"PUT"},"properties":{"description":"Information about the trunk device to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT"},"properties":{"description":"Information about the trunk queue to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkQueues","method":"POST"},"properties":{"description":"Information about the trunk queue to be created","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkQueues","method":"PUT"},"properties":{"description":"Information about the trunk queue to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT"},"properties":{"description":"Information about the trunk user to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkUsers","method":"POST"},"properties":{"description":"Information about the trunk user to be created","serverless-service":"directory"}},{"location":{"type":"REQUEST_BODY","path":"/trunks/{trunkId}/trunkUsers","method":"PUT"},"properties":{"description":"Information about the trunk user to be updated","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/calls/{id}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"call"}},{"location":{"type":"REQUEST_HEADER","path":"/calls","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"call"}},{"location":{"type":"REQUEST_HEADER","path":"/directory/{entryId}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/directory","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/messages","method":"POST","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"conversation"}},{"location":{"type":"REQUEST_HEADER","path":"/teamMessages","method":"POST","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"conversation"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices","method":"POST","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues","method":"POST","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers","method":"POST","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks/{trunkId}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/trunks","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/users/{id}","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"REQUEST_HEADER","path":"/users","method":"GET","name":"Authorization"},"properties":{"description":"Authorization header bearing the access token","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/calls/{id}","method":"GET","statusCode":"200"},"properties":{"description":"Call","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls/{id}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls/{id}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls/{id}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls/{id}","method":"GET","statusCode":"500"},"properties":{"description":"Server error","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls","method":"GET","statusCode":"200"},"properties":{"description":"Calls","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/calls","method":"GET","statusCode":"500"},"properties":{"description":"Server error","serverless-service":"call"}},{"location":{"type":"RESPONSE","path":"/directory/{entryId}","method":"GET","statusCode":"200"},"properties":{"description":"Directory Entry","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory/{entryId}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory/{entryId}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory/{entryId}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory/{entryId}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory","method":"GET","statusCode":"200"},"properties":{"description":"Directory","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/directory","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/messages","method":"POST","statusCode":"201"},"properties":{"description":"Successfully sent the message","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/messages","method":"POST","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/messages","method":"POST","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/messages","method":"POST","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/messages","method":"POST","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/teamMessages","method":"POST","statusCode":"201"},"properties":{"description":"Successfully sent the message","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/teamMessages","method":"POST","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/teamMessages","method":"POST","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/teamMessages","method":"POST","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/teamMessages","method":"POST","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"conversation"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","statusCode":"200"},"properties":{"description":"Trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices/{trunkDeviceId}","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"GET","statusCode":"200"},"properties":{"description":"Trunk devices","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"201"},"properties":{"description":"Successfully created trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"POST","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk device","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkDevices","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","statusCode":"200"},"properties":{"description":"Trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues/{trunkQueueId}","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"GET","statusCode":"200"},"properties":{"description":"Trunk queues","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"201"},"properties":{"description":"Successfully created trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"POST","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk queue","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkQueues","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","statusCode":"200"},"properties":{"description":"Trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers/{trunkUserId}","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","statusCode":"204"},"properties":{"description":"Successfully deleted trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"DELETE","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"GET","statusCode":"200"},"properties":{"description":"Trunk users","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"201"},"properties":{"description":"Successfully created trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"POST","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"200"},"properties":{"description":"Successfully updated trunk user","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"400"},"properties":{"description":"Bad request","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}/trunkUsers","method":"PUT","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}","method":"GET","statusCode":"200"},"properties":{"description":"Trunk","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks/{trunkId}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks","method":"GET","statusCode":"200"},"properties":{"description":"Trunks","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/trunks","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users/{id}","method":"GET","statusCode":"200"},"properties":{"description":"User","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users/{id}","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users/{id}","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users/{id}","method":"GET","statusCode":"404"},"properties":{"description":"Not found","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users/{id}","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users","method":"GET","statusCode":"200"},"properties":{"description":"Users","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users","method":"GET","statusCode":"401"},"properties":{"description":"Unauthorized","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users","method":"GET","statusCode":"403"},"properties":{"description":"Forbidden","serverless-service":"directory"}},{"location":{"type":"RESPONSE","path":"/users","method":"GET","statusCode":"500"},"properties":{"description":"Internal server error","serverless-service":"directory"}}]},"x-amazon-apigateway-gateway-responses":{"API_CONFIGURATION_ERROR":{"statusCode":500,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"EXPIRED_TOKEN":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"UNSUPPORTED_MEDIA_TYPE":{"statusCode":415,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"QUOTA_EXCEEDED":{"statusCode":429,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"REQUEST_TOO_LARGE":{"statusCode":413,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"AUTHORIZER_FAILURE":{"statusCode":500,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"DEFAULT_4XX":{"statusCode":400,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"THROTTLED":{"statusCode":429,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"MISSING_AUTHENTICATION_TOKEN":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"UNAUTHORIZED":{"statusCode":401,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"ACCESS_DENIED":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"AUTHORIZER_CONFIGURATION_ERROR":{"statusCode":500,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"INVALID_SIGNATURE":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"DEFAULT_5XX":{"statusCode":500,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"INTEGRATION_FAILURE":{"statusCode":504,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"RESOURCE_NOT_FOUND":{"statusCode":404,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"BAD_REQUEST_PARAMETERS":{"statusCode":400,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"WAF_FILTERED":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"INTEGRATION_TIMEOUT":{"statusCode":504,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"BAD_REQUEST_BODY":{"statusCode":400,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}},"INVALID_API_KEY":{"statusCode":403,"responseParameters":{"gatewayresponse.header.Cache-Control":"'no-store'","gatewayresponse.header.X-Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.X-Content-Type-Options":"'nosniff'","gatewayresponse.header.X-XSS-Protection":"'1; mode=block'","gatewayresponse.header.Strict-Transport-Security":"'max-age=31536000'","gatewayresponse.header.Content-Security-Policy":"'script-src 'self''","gatewayresponse.header.Referrer-Policy":"'no-referrer-when-downgrade'","gatewayresponse.header.X-Frame-Options":"'DENY'"}}},"x-amazon-apigateway-request-validators":{"phonebook-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"transcription-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"call-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"conversation-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"data-action-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"ai-pipeline-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"webhook-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"directory-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true},"log-dev | Validate request body and querystring parameters":{"validateRequestParameters":true,"validateRequestBody":true}},"tags":[{"name":"Calls","description":"Call related data for all calls made or received on the Spoke platform by your organisation. Query these endpoints to retrieve comprehensive call data records that can then be imported into a BI tool or stored as call activities in your CRM system."},{"name":"Call Events","description":"Call-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Trunks","description":"Trunks represent SIP Trunks between the Spoke platform and your on-premise or legacy PBX platforms. Trunks can be created via the Spoke Account Portal"},{"name":"Trunk Devices","description":"Trunk devices usually represent real phones in communal areas, such as a conference phone or lunch room phone."},{"name":"Trunk Users","description":"Trunk users usually represent the individual users in your phone system who may have soft phones or desk phones."},{"name":"Trunk Queues","description":"Trunk queues usually represent call queues or hunt groups in your phone system."},{"name":"Directory","description":"The Spoke Unified Directory is a comprehensive directory of all the users, teams and devices in your organisation. It is used to store and manage your legacy internal phone directory."},{"name":"Users","description":"Users are the individual Spoke Users in your account. You can query this API to get all active users and their current system availability."},{"name":"User Events","description":"User-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Phonebooks","description":"Phonebooks are containers that hold an organisation's contacts. Typically you will create one phonebook per integration (e.g. CRM) to store [Contacts](#tag/Contacts) for that integration against."},{"name":"Contacts","description":"Contacts represent external contacts to your organisation. Spoke uses contacts in each phonebook to identify incoming callers and to allow Spoke users to search and place calls. "},{"name":"Contact Events","description":"Contact-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Conversations","description":"Conversations represent long-running message threads between a Spoke user with an SMS enabled DDI and a customer of your organisation."},{"name":"Conversation Events","description":"Conversation-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Transcripts","description":"Transcripts represent written versions of audio content, typically transcribed from call or voicemail recordings made or received on the Spoke platform."},{"name":"Transcript Events","description":"Transcript-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Content Analysis","description":"A content analysis job represents an AI-generated automated analysis of call recordings or transcripts. Running a content analysis job extracts key information from a recording or transcript into structured JSON payloads that can be used to drive downstream automation or systems integration."},{"name":"Content Analysis Events","description":"Content analysis related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Teams","description":"Teams are groups of Spoke Users and SIP Devices."},{"name":"Team Events","description":"Team-related webhook events that you can listen to. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Webhooks","description":"Webhooks are a way to receive notifications when certain events happen in your Spoke account. For more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},{"name":"Data Action Concepts","description":"## Overview\n\nSpoke supports data actions as a mechanism for customizing organization specific work flows. They are useful for configuring additional call rules, such as blocking outbound calls to specific phone numbers, or overriding the caller ID shown on outbound calls.\n\nTo get started, you will need to configure a data action in the Spoke [Account Portal](https://account.spokephone.com/developers/data-actions). You will need to provide a valid, publicly routable `HTTPS` URL that accepts `GET` or `POST` requests with the `application/json` content type.\n\nSpoke will invoke this URL with the corresponding payload when performing a data action.\n\nFor security reasons, we strongly recommend that you ensure requests to your endpoint come from Spoke. The easiest method to validate that a request was sent via Spoke is to verify the signature.\n\n## Securing Data Actions\n\n### Verifying the signature\n\nA request is considered valid based on the following conditions:\n- The `x-spoke-timestamp` header is a valid UNIX timestamp, and represents a time sent within the last 5 minutes (using millisecond precision). This header allows the consumer to validate when a request was sent, to avoid [replay attacks](https://en.wikipedia.org/wiki/Replay_attack).\n- The `x-spoke-signature` header is formatted as `sha256=<HMAC algorithm cipher text>`, and it contains the correct hash based on the hexadecimal representation of the SHA256 HMAC algorithm with the signing secret applied to `<x-spoke-timestamp header value>.<request data>`.\n  - The calculated hash includes the timestamp to ensure that an attacker cannot modify the timestamp without also invalidating the message signature.\n  - The source of `<request data>` depends on the HTTP method used:\n    - For `GET` requests, it is the request URL including the query parameters\n    - For `POST` requests, it is the raw request body\n\nA request can be validated via the following:\n```js\nconst isValidSpokeRequest = (requestData: string, signingSecret: string, spokeTimestamp: number, spokeSignature: string): boolean => {\n\n  // Determine if timestamp is valid\n  const isValidTimestamp = (Date.now() - spokeTimestamp) <= 300000; // 5 x 60 x 1000\n  if (!isValidTimestamp) {\n    return false;\n  }\n\n  // Determine if the signature is valid\n  const [algorithm, cipher] = spokeSignature.split(\"=\");\n  const body = `${spokeTimestamp}.${requestData}`\n\n  const h = crypto.createHmac(algorithm, signingSecret);\n  h.update(body);\n  return h.digest(\"hex\") === cipher;\n}\n```\n\n## Delivery Attempts\n\nSpoke will attempt to deliver Data Action events to your server once. To successfully invoke the data action, your endpoint *must* respond with a valid response payload within 2 seconds of the HTTP request being received.\n\nFailure to return a response within the timeout period will *not* be treated as an error condition. If your endpoint does not return a response within the timeout period, the call will proceed as planned, using the original configuration for the call.\n"},{"name":"Inbound Conversations","description":"## Overview\n\nThe Inbound Conversations Data Action allows you to programmatically handle the creation of a new conversation, including:\n\n- Sending auto response messages\n- Assigning one or more Spoke users to manage the conversation\n- Updating the conversation name\n\nA `Conversation` in Spoke is a thread of messages between a group of two or more participants.  Participants can be on external channels, such as SMS or WhatsApp, or internal channels, such as user of Spoke application. External participants connect to a conversation through an SMS or WhatsApp enabled number.  Internal participants connect using the Spoke application.\n\nThis Data Action is invoked when a new conversation is created from an incoming message from a participant on an external channel. A new conversation is created when a message is received from an external contact that is not already involved in an active conversation with the given company number.\n\nImplementing this data action allows you to define which Spoke Users (if any) are responsible for managing the conversation, as well as optionally sending an auto response to the external participant. Once a conversation is created, this Data Action will not be invoked again for the contact number/company address pair, until the active conversation is closed.\n\n> Note: Spoke uses the Twilio Conversations API to support conversational messaging in the Spoke application.  The Data Action(s) documented here extend the functionality of the Conversations API to enable routing, shared inbox functionality and auto response management.  You can read more about Twilio's conversations API [here](https://www.twilio.com/docs/conversations/).\n\nBelow are the settings that can be controlled via Inbound Conversations Data Action.\n\n### Auto Response\n\nAllows an auto response message to be sent to the customer.  Use this to automatically respond to the customer without waiting for a user to respond.\n\nOn top of normal auto response scenarios such as `Thanks for your message, we'll be with you shortly`, the auto response feature can be used for scenarios where you do not want your users handling a conversation, for example:\n\n- Profanity in the incoming message\n- Time of day\n- A closed or unmonitored service channel\n\n### Routing Action\n\nDefines whether a conversation is to be routed to Spoke users via `assign` or not routed via `donotroute`.\n\nIf a conversation is set to `donotroute` then no Spoke users will be assigned to the conversation. The conversation will be closed, and because no internal participants are assigned the customer will not receive any response, unless the auto response feature is also used.\n\n### Assign Users\n\nAllows one or more Spoke `users` to be assigned to the conversation. This allows you to fine tune which users are added to a specific conversation. You can add more than one user, and all users can actively participate in the conversation.\n\nEach user is identified by their email address in Spoke. Invalid emails are ignored.\n\n### Conversation Name\n\nAllows a name to be assigned to a conversation. Use this to provide more context to your Spoke users about the conversation.  The name will appear in the conversation list in the Spoke application, and will be used as the title for any push notifications that are sent to users' devices when new messages are added to the conversation.\n\n### Claim Rule\n\nAllows a claim rule to be assigned to a conversation. Claiming a conversation requires a single team member to 'claim' ownership of the conversation. When a conversation is claimable, a 'Claim Conversation' button displays in the Spoke application. Once claimed, all other team members are removed from the conversation.\n\n### Close Timer\n\nAllows a close timer to be set to a conversation. Use this to control how long the conversation will remain open before being automatically closed by the system. The timer is reset any time a conversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format.\n\n\n### Passthrough Parameters\n\nSets the passthrough parameters associated with the conversation.\n\nThe maximum size of passthrough parameters is 1000 bytes. If this limit is exceeded, then the passthrough parameters from the response will be discarded.\n\n## Request and Response\n\nSpoke sends an HTTP `POST` request with the following parameters in the request body, and expects a response payload of the below shape within 2 seconds.\n\nIf the request returns a non-200 response or times out and the fallback URL is configured, Spoke will send another request to the fallback URL with the same payload.\n\nIf no response payload is returned, the conversation will proceed as planned, using the original configuration for the given company address. This means that:\n\n- Messages to an assigned SMS enabled DDI will be routed to the assigned users\n- Company numbers or addresses that are unassigned will not have any users added to the conversation, and the conversation will be automatically closed\n\n### Inbound Conversations Data Action Request Parameters\n\n<SchemaDefinition schemaRef=\"#/components/schemas/InboundConversationsDataActionRequestPayload\" showReadOnly={true} showWriteOnly={true}/>\n\n---\n\n### Inbound Conversations Data Action Response Payload\n\n<SchemaDefinition schemaRef=\"#/components/schemas/InboundConversationsDataActionResponsePayload\" showReadOnly={true} showWriteOnly={true}/>\n"},{"name":"Insights","description":"## Overview\n\nThe [Custom Insights Application Data Action](https://account.spokephone.com/developers/data-actions) allows you to programmatically enrich and customize information about a customer while you are viewing their [contact card](#tag/Insights/Contact-Insights) or are on a [call](#tag/Insights/Call-Insights) with them in the Spoke Phone app.\n\n<blockquote\n    style=\"border-color:#FF5722;\n    background-color:#F6F6F6;\n    padding-top:1%;\n    padding-bottom:1%\";\n>\n    <p>Before getting started, we recommend you read the <a href=\"#tag/Data-Action-Concepts\">Data Action Concepts</a> section above to familiarise yourself with the Spoke Data Action mechanism and how Twilio calls integrate with Spoke.</p>\n</blockquote>\n\n<p align=\"center\">\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/long-cards.png\" width=\"50%\" />\n</p>\n\nWhen a user views a contact card or is on a call, Spoke sends an HTTP `GET` request to the URL you have\n[configured for the Custom Insights Application Data Action](https://account.spokephone.com/developers/data-actions)\nand expects a response that contains the Insight cards that will be displayed when the user views that contact’s\nInsights.\n\n<p align=\"center\">\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/data-action-config.png\" width=\"100%\" />\n</p>\n\n## Contact Insights\n\nSpoke Phone app users can view Insights for other Spoke users from the internal directory or phonebook contacts from the external directory.\n\n<p align=\"center\">\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/insights-menu-item.png\" width=\"50%\" />\n</p>\n\nSpoke will include the following fields as query parameters when sending a contact Insights request to the configured URL for Custom Insights Application Data Action:\n\n<SchemaDefinition schemaRef=\"#/components/schemas/ContactInsightRequestParameters\" showReadOnly={true} showWriteOnly={true} />\n\nThe request will be sent every time the user opens a contact card from the directory.\n\nAs can be seen in the request shape above, the request payloads are slightly different between internal contacts and external phonebook contacts.\n\nMainly, for internal contacts, the `contactSource` field will not be provided and the `isInternal` field will be `true`.\nWhereas for external phonebook contacts, the `contactSource` field will be included and the `isInternal` field will be\n`false`.\n\n## Call Insights\n\nSpoke Phone app users can view Insights for calls from the call screen Insights tab.\n\n<p align=\"center\">\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/in-call.png\" width=\"50%\" />\n</p>\n\nSpoke will include the following fields as query parameters when sending a call Insights request to the configured URL:\n\n<SchemaDefinition schemaRef=\"#/components/schemas/CallInsightRequestParameters\" showReadOnly={true} showWriteOnly={true} />\n\nIf Spoke has identified that a call involves a contact, then the request will also include the associated `contactId`,\n`contactEmail`, and `contactSource` (`contactSource` only included for external phonebook contacts).\n\n### Passthrough Parameters\nAny existing passthrough parameters stored against the call are included in the request. Passthrough parameters are flattened into key-value pairs, URL-encoded, and then appended to the query string.\n\nExample:\n\nGiven a call with the following passthrough parameters:\n\n```json\n{\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"OR12345\"\n  }\n```\n\nThe constructed Call Insights data action request will be:\n\n```\nhttps://api.example.com/insights?direction=outbound&isInternal=false&requestOrigin=spoke.call&userEmail=alice@smith.com&vendorCallId=CA1234&x-contactId=HS12345&x-orderId=OR12345\n```\n\n## Conversation Insights\n\nSpoke app users can view primary party's Insights for conversations from the conversation screen pop up menu or the conversation settings screen.\n\n<table>\n    <tr>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-primary-1.png\" width=\"100%\" /></td>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-primary-2.png\" width=\"100%\" /></td>\n    </tr>\n</table>\n\n<table>\n    <tr>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-primary-3.png\" width=\"100%\" /></td>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-primary-4.png\" width=\"100%\" /></td>\n    </tr>\n</table>\n\nSpoke app users can also view any selected party's Insights for conversations from the participant pop up menu of the conversation settings screen.\n\n<table>\n    <tr>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-selected-1.png\" width=\"100%\" /></td>\n        <td><img alt=\"Developer API Screenshot\" src=\"./img/insights/conversation-selected-2.png\" width=\"100%\" /></td>\n    </tr>\n</table>\n\nSpoke will include the following fields as query parameters when sending a conversation Insights request to the configured URL:\n\n<SchemaDefinition schemaRef=\"#/components/schemas/ConversationInsightRequestParameters\" showReadOnly={true} showWriteOnly={true} />\n\n## Insights Response\n\nSimilar to other [Data Actions](#section/Delivery-Attempts), Spoke expects a response within 2 seconds. The response payload is expected to be an object containing Insight cards with optional context and preferences, as specified in the shape below.\n\n<SchemaDefinition schemaRef=\"#/components/schemas/InsightDataActionResponse\" showReadOnly={true} showWriteOnly={true} />\n\n### Combining with Enlighten Insights\n\nIf your organization has [Enlighten Call Insights](https://account.spokephone.com/advanced/enlighten) enabled and [Data Action Insights](https://account.spokephone.com/developers/data-actions-insights) configured in the Spoke Account Portal, you can use the `preferences` field in the Insights response to control how Enlighten Insights are displayed alongside your Data Action Insight cards.\n\nThe following table describes the behavior of the Spoke application when these settings are configured:\n\n| Enlighten Call Insights Enabled | Data Action Insights Configured | Behavior |\n| --- | --- | --- |\n| Yes | Yes | Both sources displayed, `preferences` controls card ordering and context source |\n| Yes | No | Only Enlighten Insights displayed |\n| No | Yes | Only Data Action Insights displayed |\n| No | No | No Insights displayed |\n\n#### Example\n\nThe following Insights Response uses the `preferences` field (see the [schema definition above](#tag/Insights/Insights-Response)) to configure what to display in the Spoke application when both Enlighten and Data Action insights are enabled. Screenshots of each screen are shown below.\n\n```json\n{\n  \"context\": {\n    \"body\": \"**Peter Parker** - CEO at Stark Industries.\\nLast contacted 3 days ago regarding renewal.\"\n  },\n  \"cards\": [\n    {\n      \"title\": \"Customer Info\",\n      \"body\": \"**Name**: Peter Parker\\n**Company**: Stark Industries\\n**Role**: CEO\\n**Location**: London, UK\",\n      \"state\": \"expanded\",\n      \"thumbnail\": { \"icon_name\": \"person\" }\n    },\n    {\n      \"title\": \"Recent Activity\",\n      \"body\": \"1. Opened renewal quote email - 2 hours ago\\n2. Visited [pricing page](https://example.com/pricing) - yesterday\\n3. Spoke with support about billing - 3 days ago\",\n      \"state\": \"expanded\",\n      \"thumbnail\": { \"icon_name\": \"history\" }\n    }\n  ],\n  \"preferences\": {\n    \"context\": {\n      \"preferredSource\": \"dataAction\"\n    },\n    \"cards\": {\n      \"enlighten\": {\n        \"display\": \"before\"\n      }\n    }\n  }\n}\n```\n\n**Pre-call** (desktop only)\n\nOnly the context is shown. The context from the Insights Response is displayed as specified by `preferredSource`.\n\n<p align=\"center\">\n  <img alt=\"Pre-call screen\" src=\"./img/insights/combinedInsightsExample/pre-call.png\" width=\"50%\" />\n</p>\n\n**Call Summary** (call history → select a call)\n\nOnly the context is shown. The context from the Insights Response is displayed as specified by `preferredSource`.\n\n<p align=\"center\">\n  <img alt=\"Call summary screen\" src=\"./img/insights/combinedInsightsExample/call-details.png\" width=\"50%\" />\n</p>\n\n**In-call** (active call → Insights tab)\n\nThe context from the Insights Response is shown followed by the card list. Enlighten cards are displayed before the Data Action cards as specified by `display`.\n\n<p align=\"center\">\n  <img alt=\"In-call screen\" src=\"./img/insights/combinedInsightsExample/in-call.png\" width=\"50%\" />\n</p>\n\n**Contact Insights** (directory → select contact → Insights)\n\nThe context from the Insights Response is shown followed by the card list. Enlighten cards are displayed before the Data Action cards as specified by `display`.\n\n<p align=\"center\">\n  <img alt=\"Contact insights screen\" src=\"./img/insights/combinedInsightsExample/contact.png\" width=\"50%\" />\n</p>\n\n**Call Intelligence** (call history → select a call → Insights)\n\nThe context from the Insights Response is shown followed by the card list. Enlighten cards are displayed before the Data Action cards as specified by `display`.\n\n<p align=\"center\">\n  <img alt=\"Call intelligence screen\" src=\"./img/insights/combinedInsightsExample/call-intelligence.png\" width=\"50%\" />\n</p>\n\n## Debugging\nA table of Insights Data Actions that have been performed is available on the configuration page on the Spoke Account Portal and can be used to debug your Custom Insights Application.\n\n<img alt=\"Developer API Screenshot\" src=\"./img/insights/custom-insights-app.png\" width=\"100%\" />\n\n### Status Types\nThe `status` column on the table refers to the response from the configured URL. There are 3 status types:\n* `success`\n* `failure`\n* `noData`\n\nIt is important to note that `status` does not refer to the validity of the response body.\n\nHere are cases of each status type when they appear on the Spoke Account Portal and their scenarios when users click to view Insights and there is an error:\n\n* #### The table will not be updated with a new entry if the Insights app has not been configured for an organisation\n\n<figure align=\"center\">\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/not-enabled.png\" width=\"100%\" />\n</figure>\n\n<figure align=\"center\">\n    <figcaption>Spoke Phone App</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/not-enabled-scene.png\" width=\"50%\" />\n</figure>\n\n___\n\n* #### An entry with a status of `success` will be added if:\n  * there is a valid response or\n  * the response is not valid JSON or is malformed\n\n<figure align=\"center\">\n    <figcaption>Table of Insights Data Actions item</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/invalid-status.png\" width=\"100%\" />\n</figure>\n\n<figure align=\"center\">\n    <figcaption>Spoke Phone App</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/invalid.png\" width=\"50%\" />\n</figure>\n\n___\n\n* #### An entry with a status of `failed` will be added if a network error is encountered\n\n<figure align=\"center\">\n    <figcaption>Table of Insights Data Actions item</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/error-status.png\" width=\"100%\" />\n</figure>\n\n<figure align=\"center\">\n    <figcaption>Spoke Phone App</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/error.png\" width=\"50%\" />\n</figure>\n\n___\n\n* #### An entry with a status of `noData` when the response is empty (i.e. if there is no payload) or an empty array is returned\n\n<figure align=\"center\">\n    <figcaption>Table of Insights Data Actions item</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/no-data-status.png\" width=\"100%\" />\n</figure>\n\n<figure align=\"center\">\n    <figcaption>Spoke Phone App</figcaption>\n    <img alt=\"Developer API Screenshot\" src=\"./img/insights/no-data.png\" width=\"50%\" />\n</figure>\n"},{"name":"Outbound Call","description":"## Overview\n\nThe Outbound Call Data Action Function allows you to programmatically change the default state/configuration of an outbound Spoke call, right as the call is about to be placed.\n\nWhen you set up Spoke, you set up company defaults for items such as call recording, the CallerIDs customers see when your team make calls, etc. Outbound Data Actions allow you to change this default behavior on a call-by-call basis.\n\n---\n\nThese are the actions that are supported by Outbound Call Data Action:\n\n### Override Dial Permission\n\nAllow or block any outbound call made to the specified phone number. Applies to all calls, whether made from the Spoke Phone application or a SIP device. For SIP device calls, this overrides the flag set against \"Outbound calls allowed\".\n\n---\n\n### Override Outbound Caller ID\n\nOverrides the caller ID for any outbound call made.\n\n---\n\n### Passthrough Parameters\n\nOverrides the passthrough parameters associated with the outbound call. Passthrough parameters can be attached to an outbound call using [Spoke's Deep Linking `dial` verb](#tag/Dial).\n\nExisting passthrough parameters are included in the GET request and are flattened and appended to the query string as key-value pairs.\n\nPassthrough parameters from the data action response will be merged with the existing passthrough parameters associated with the call. If a key exists in both the response and the current passthrough parameters, the value from the response will override the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the passthrough parameters from the response will be discarded, and the stored passthrough parameters will not be updated.\n\n---\n\n## Request and Response\n\nSpoke sends an HTTP `GET` request with the following query parameters, and expects a response payload of the below shape within 2 seconds. If no response payload is returned, the call will proceed as planned, using the original configuration for the call.\n\nThe request parameters for this Data Action will vary based on how the call is initiated:\n\n* If the call is initiated by a user or a SIP device attached to the user, the request will include the `userId`, `userExtension`, and `userEmail` parameters. No device-related parameters will be included.\n\n* If the call is initiated by a standalone SIP device, the request will not include any user-related parameters and will include the `deviceId`, `deviceExtension`, and `deviceAddress` parameters instead.\n\n### Outbound Call Data Action Request Parameters\n\n<SchemaDefinition schemaRef=\"#/components/schemas/OutboundCallRequestPayload\" showReadOnly={true} showWriteOnly={true}/>\n\n#### Passthrough Parameters\nThe existing passthrough parameters are flattened into key-value pairs, URL-encoded, and then appended to the query string.\n\nExample:\n\nGiven a call with the following passthrough parameters:\n\n```json\n{\n  \"x-customerName\": \"John Doe\",\n  \"x-item\": \"Smartphone & Accessories\"\n}\n```\n\nThe constructed data action request will be:\n\n```\nhttps://api.example.com/outboundCall?callerId=1234&contactNumber=%2B12178888888&vendorCallId=4321&x-customerName=John%20Doe&x-item=Smartphone%20%26%20Accessories\n```\n\n---\n\n### Outbound Call Data Action Response Payload\n\n<SchemaDefinition schemaRef=\"#/components/schemas/OutboundCallResponsePayload\" showReadOnly={true} showWriteOnly={true}/>\n"},{"name":"Team Call","description":"## Overview\n\nThe Team Call Data Action allows you to programmatically override team configuration just prior to a call being offered to a team.\n\nNote that the data action is not invoked if the call is sent directly to the team's voicemail e.g. transferring to the team's voicemail or redirecting to Spoke via its extension with `sendToVoicemail=true`.\n\nBelow are the configurations that can be overridden via Team Call Data Action.\n\n### Display Name\n\nOverrides the display name of the team the call will be offered to. This overridden name will be displayed in following areas:\n\n- Incoming call screen for new calls, transferred calls, and rolled over calls to the team\n- Incoming call and missed call notifications\n- Current call screen\n- Users' call history and call details on Spoke applications\n- Account-wide call history and call summary on Spoke Account Portal\n- Call summary and voicemail summary emails\n\n> Note: This field is ignored for internal calls.\n\n### Users\n\nOverrides the list of `users` who are offered the call. This allows you to fine tune who is offered individual calls while still following standard team offer flows.\n\nEach user is identified by their email address in Spoke. Invalid emails are ignored.\n\nAvailability rules still apply - only available users will be offered the call.\n\nIf the team's offer pattern is set to Round-robin, the call will be offered to the users in the order in which they appear in the list.\n\n---\n\n### Timeout\n\nOverrides the number of the seconds Spoke will wait for someone to answer the call before returning or forwarding the call.\n\nThe supported range of values for `timeout` is from 10 to 300 seconds. If the provided value falls outside the range, it will be rounded to the nearest supported value.\n\n---\n\n### Next Offer Timeout\n\nOverrides the number of the seconds Spoke will wait before offering the call to the next available user(s).\n\nThe supported range of values for `nextOfferTimeout` is from 5 to 60 seconds. If the provided value falls outside the range, it will be rounded to the nearest supported value.\n\n> Note : The asynchronous nature of API calls between Spoke and Twilio coupled with the overhead of setting up and tearing down call legs means that timeout values are indicative only, and the follow on action may occur some number of seconds after the timeout expires.\n\n---\n\n### Priority\n\nOverrides the priority of the call. This allows you to prioritise or deprioritise the call.\n\nThe supported range of values for `priority` is an integer value between 1 and 9, where 1 is the highest priority and 9 is the lowest. If the provided parameter falls outside the range, the call will be assigned a default value of 5.\n\n---\n\n\n### Passthrough Parameters\n\nOverrides the passthrough parameters associated with the inbound call.\n\nPassthrough parameters can be attached to an inbound call when using [Spoke's Redirect Handler](#section/Routing-Twilio-Calls-into-Spoke).\n\nExisting passthrough parameters are included in the POST request. If there are no existing passthrough parameters, the `passthroughParameters` field will be an empty object.\n\nPassthrough parameters from the data action response will be merged with the existing passthrough parameters associated with the call. If a key exists in both the response and the current passthrough parameters, the value from the response will override the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the passthrough parameters from the response will be discarded, and the stored passthrough parameters will not be updated.\n\n---\n\n## Request and Response\n\nSpoke sends an HTTP `POST` request with the following parameters in the request body, and expects a response payload of the below shape within 2 seconds.\n\nIf the request returns a non-200 response or times out and the fallback URL is configured, Spoke will send another request to the fallback URL with the same payload.\n\nIf no response payload is returned, the call will proceed as planned, using the original team configuration.\n\n### Team Call Data Action Request Parameters\n\n<SchemaDefinition schemaRef=\"#/components/schemas/CallGroupDataActionRequestPayload\" showReadOnly={true} showWriteOnly={true}/>\n\n---\n\n### Team Call Data Action Response Payload\n\n<SchemaDefinition schemaRef=\"#/components/schemas/CallGroupDataActionResponsePayload\" showReadOnly={true} showWriteOnly={true}/>\n\n---\n\n## Example Timelines\n\nA Team Call Data Action will be triggered any time a call is about to be offered to a given team. This means that it may be triggered more than one time during a call, for example:\n\n- The team is configured with an overflow rule that routes unanswered calls to a second team\n- A call is transferred by an agent to another team\n\nIn both cases above, if a Team Call Data Action is configured, two requests will be made to the configured URL. In the second request, the `directoryTarget` and `offerConfig` attributes of the request payload will be updated to reflect the new team. All other attributes will remain the same.\n\nData actions for teams are triggered irrespective of the source of a call. This includes:\n\n- Direct calls to the team via a team DDI\n- Calls redirected into Spoke from an external IVR such as Studio\n- Calls received via the Spoke IVR\n- Any actions that result in calls being offered to a team from the Spoke application, such as transfer or a user calling the team directly\n\nThe following examples illustrate when data action requests will be made during the lifecycle of a call.\n\n---\n\n### Example 1 - Inbound Call with Transfer\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Team Call Data Action Request Sent</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Alice starts a call to a company number.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Reception Desk</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice presses 0 for Reception Desk</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob answers the call and talks to Alice.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Sales</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Bob transfers Alice to the Sales team</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Fred answers the call and talks to Alice.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Fred hangs up the call.</h4>\n    </div>\n  </div>\n</div>\n\n---\n\n### Example 2 - Direct Call with Offer Forwarding\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Team Call Data Action Request Sent</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Customer Support</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Customer Alice starts a call to the Customer Support team.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>No one in the Customer Support team answers.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Reception Desk</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>The offer is forwarded to Reception Desk according to Customer Support's configuration.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Natty answers the call and talks to Alice.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Natty hangs up the call.</h4>\n    </div>\n  </div>\n</div>\n\n---\n\n### Example 3 - Redirect to a Team Call via API\n\n<div class=\"timeline-headings\">\n  <h3>User Actions</h3>\n  <h3>Team Call Data Action Request Sent</h3>\n</div>\n<div class=\"timeline\">\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Regional Sales</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Call from Alice is redirected to the Regional Sales team via its extension number.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>No one in the Regional Sales team is available.</h4>\n      <h4>The call is returned to the originating Twilio Studio flow.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container right\">\n    <div class=\"timeline-content\">\n      <code>Request for Global Sales</code><br />\n    </div>\n  </div>\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>The call is redirected to the Global Sales team via its extension number.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Dob answers the call and talks to Alice.</h4>\n    </div>\n  </div>\n\n  <div class=\"timeline-container left\">\n    <div class=\"timeline-content\">\n      <h4>Alice hangs up the call</h4>\n    </div>\n  </div>\n</div>\n\n---\n"},{"name":"Spoke App Deep Linking","description":"Deep links in the Spoke Phone app allow users to route directly to specific resources or perform actions within the app by clicking a link on a web page or launching a URL from another application. These links streamline navigation, enabling users to view call history, make a call, or send messages in one click.\n\nDeep links work across all supported platforms - Windows, MacOS, iOS and Android - and use a special `spoke:` URL scheme that is registered when the Spoke app is installed on the target device.\n\n**Requirement**: The [Spoke Phone app](https://spokephone.com/download/) must be installed on the device for the deep links to work.\n\nSupported Functionality\n- **Call History**: View call details<!-- or call insights. -->\n- **Dialing**: Dial a number with a specified caller ID.\n- **Messaging**: Initiate or continue SMS or WhatsApp conversations.\n\nEach URL must be URI-encoded before use to ensure correct parsing.\n"},{"name":"Call History","description":"## View call details\n\n`spoke://call/{callId}`\n\nNavigates to the details of the specified call.\n\n#### Parameters\n- **callId** - The unique identifier of the call.\n  - If `callId` is invalid or not provided, or the call does not exist, the app will redirect to the user's Call History list.\n\n#### Example\n\n`spoke://call/e814fb79-3f4f-4cf3-94ed-f88a5c15cb9e`\n\n<!-- TODO: Uncomment when call history insights feature is available globally\n## View call insight\n\n`spoke://call/{callId}/insight`\n\nNavigates to the insights for the specified call. A [Call Insight data action](#tag/Insights/Call-Insights) request will be made using `spoke.callhistory` as the request origin, and insights for the call will be shown based on the response.\n\n#### Parameters\n\n- **callId** - The unique identifier of the call.\n  - If `callId` is invalid or not provided, or the call does not exist, the app will redirect to the user's Call History list.\n\n#### Example\n\n`spoke://call/e814fb79-3f4f-4cf3-94ed-f88a5c15cb9e/insight`\n-->\n"},{"name":"Dial","description":"## Dial a number\n\n`spoke://dial?contactNumber={contactNumber}&callerId={callerId}`\n\nDials a contact number using a specified caller ID.\n\n#### Parameters\n\n- **contactNumber** - The phone number to dial in +E164 format.\n  - If `contactNumber` is not provided, the app will open the Dial Pad.\n  - If `contactNumber` is invalid, it will be prefilled in the Dial Pad, allowing the user to edit it.\n- **callerId** (optional) - The caller ID to use for the call.\n  - If `callerId` is not provided, the call will be made using the user's default caller ID.\n  - `callerId` must be from the list of available caller IDs assigned to the user. If the `callerId` is invalid, the app will prompt the user to select a valid one.\n  - If `callerId` is valid but `contactNumber` is invalid, the valid `callerId` will be preselected in the Dial Pad.\n\n#### Example\n\n`spoke://dial?contactNumber=%2B64221112222&callerId=%2B14341112222`\n\n**Note**: Both `%2B64221112222` and `%2B14341112222` are URI-encoded +E164 phone numbers, but the Spoke Phone app is able to handle `+64221112222` as well.\n\n#### Passthrough parameters\n\nThe Spoke Phone app supports passthrough parameters when dialling a contact via a deep link. Passthrough parameters are stored against the call record and are then included in the call's [webhook events](#section/Webhook-Events). These parameters can also be retrieved when [getting the call resource through the Spoke API](#tag/Calls/operation/callGetById).\n\nUse passthrough parameters to track a call made by a user from a link in an external application (such as a CRM or in-house system) and associate the outcome of the call (including call recordings and any other records created by the Spoke platform) with the external platform.\n\nTo attach passthrough parameters to a call, add them to the deep link URL as a query string parameter with the parameter name prefixed with `x-`, e.g.:\n\n`spoke://dial?contactNumber=%2B64221112222&callerId=%2B14341112222&x-contactId=HS12345&x-orderId=OR12345`\n\nOpening the above deep link URL will result in the `call` object in the webhook event payload and the call resource in the API to contain a `passthroughParameters` object containing the exact parameters provided in the deep link URL:\n\n```json\n{\n  ...,\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"OR12345\"\n  }\n}\n```\n\nThe passthrough parameters in the deep link URL are limited to a total of 1000 bytes.\n\nIf the total size of the passthrough parameters exceeds 1000 bytes, the call will not be made and the Spoke app will navigate to the dial pad, prefilled with provided the contactNumber and callerId.\n\nPassthrough parameters will not be stored against the call if opening the deep link results in the call not being made. This includes the following scenarios:\n\n- The passthrough parameters exceeds the limit of 1000 bytes and the user subsequently presses the dial button on the dial pad.\n- The contactNumber is invalid and the user subsequently edits the number on the dial pad and presses the dial button.\n- The callerId is invalid and the user subsequently selects a valid callerId on the dial pad and presses the dial button.\n- No contactNumber is provided and the user subsequently enters a number on the dial pad and presses the dial button.\n\n**It is important to ensure that the source system implements appropriate validation of all required parameters. This includes ensuring that:**\n\n- `callerId` MUST be a valid +E164 number\n- `contactNumber` MUST be a valid +E164 number\n- Passthrough parameter length does not exceed the documented limit\n"},{"name":"Message","description":"## Send an SMS message\n\n`spoke://message/sms?contactAddress={contactAddress}&companyAddress={companyAddress}&body={body}`\n\nStarts or continues an SMS conversation using the given `companyAddress` as the sender ID and prefills the message input with the provided `body`.\n\n**Important**: Messages are never automatically sent. The user must press the send button after reviewing or editing the prefilled content.\n\n#### Parameters\n\n- **contactAddress** - The +E164-formatted phone number of the contact.\n  - If `contactAddress` is invalid or not provided, the app will navigate to the Messages tab.\n  - If an SMS conversation with `contactAddress` exists, the user will be directed to that conversation; otherwise a new SMS conversation will be created.\n- **companyAddress** (optional) - The +E164-formatted phone number to use as the messaging sender ID.\n  - `companyAddress` must be a phone number from the user's [list of available SMS-capable numbers](https://account.spokephone.com/phone-numbers/advanced-routing).\n  - If `companyAddress` is invalid, the user will be prompted to select a valid phone number from the list of available SMS sender IDs.\n- **body** (optional) - The message content to prefill in the message input.\n  - `body` should be URI-encoded to ensure correct parsing.\n  - If `body` is not provided, the message input will be empty.\n\n#### Example\n\n`spoke://message/sms?contactAddress=%2B64221112222&companyAddress=%2B14341112222&body=Hi%20Bob%2C%20this%20is%20Alice`\n\n## Send a WhatsApp message\n\n`spoke://message/whatsapp?contactAddress={contactAddress}&companyAddress={companyAddress}&templateName={templateName}`\n\nStarts or continues a WhatsApp conversation using the given `companyAddress` as the sender ID, prefilled with a message generated from the Twilio content template matching `templateName`.\n\n**Important**: Messages are never automatically sent. The user must press the send button after reviewing the content generated from the matching template.\n\n#### Parameters\n\n- **contactAddress** - The WhatsApp address of the contact. E.g.: `whatsapp:+64221112222`\n  - If `contactAddress` is invalid or not provided, the app will navigate to the Messages tab.\n  - If a WhatsApp conversation with `contactAddress` exists, the user will be directed to that conversation; otherwise a new WhatsApp conversation will be created.\n- **companyAddress** (optional) - The WhatsApp address to use as the messaging sender ID. E.g.: `whatsapp:+14341112222`\n  - `companyAddress` must be a WhatsApp-capable number from the user's [list of available WhatsApp-capable numbers](https://account.spokephone.com/phone-numbers/advanced-routing).\n  - If `companyAddress` is invalid or missing, the user will be prompted to select a valid phone number from the user's list of available WhatsApp sender IDs.\n- **templateName** (optional) - The friendly name of the approved WhatsApp content template available.\n  - The `templateName` must match the friendly name of the WhatsApp-approved content template on Twilio.\n  - If `templateName` is not provided, the user will be prompted to select a template from the list of available templates.\n  - If `templateName` is invalid, the message input will be empty.\n  - For more details, refer to [our WhatsApp support documentation](https://support.spokephone.com/hc/en-us/search?utf8=%E2%9C%93&query=How+to+setup+WhatsApp+on+Spoke+Phone) or the [Twilio Content API](https://www.twilio.com/docs/content/content-api-resources).\n\n#### Example\n\n`spoke://message/whatsapp?contactAddress=whatsapp%3A%2B64221112222&companyAddress=whatsapp%3A%2B14341112222&templateName=WelcomeMessage`\n"}],"x-tagGroups":[{"name":"Data Actions","tags":["Data Action Concepts","Inbound Conversations","Insights","Outbound Call","Team Call"]},{"name":"Deep Linking","tags":["Spoke App Deep Linking","Call History","Dial","Message"]},{"name":"Directory","tags":["Directory","Users","User Events","Teams","Team Events"]},{"name":"CRM Integration","tags":["Phonebooks","Contacts","Contact Events"]},{"name":"Calls","tags":["Calls","Call Events"]},{"name":"Conversations","tags":["Conversations","Conversation Events"]},{"name":"Spoke Intelligence","tags":["Transcripts","Transcript Events","Content Analysis","Content Analysis Events"]},{"name":"Webhook Management","tags":["Webhooks"]},{"name":"PBX Overlay","tags":["Trunks","Trunk Devices","Trunk Queues","Trunk Users"]}],"servers":[{"url":"https://integration.spokephone.com"}],"components":{"schemas":{"CallAnsweredEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.answered","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallContactAssignedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.contact_assigned","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallContactAssignedWithAddEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.contact_assigned_with_add","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallContactAssignedWithUpdateEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.contact_assigned_with_update","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallEndedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.ended","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallFormStartedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallFormEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.form.started","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallFormSubmittedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallFormEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.form.submitted","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallHighlightCreatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallHighlightEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.highlight.created","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallHighlightRecordingAvailableEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallHighlightEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.highlight.recording_available","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallHungupEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.hungup","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallNotAnsweredEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.not_answered","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallNoteCreatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallNoteEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.note.created","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallRecordingAvailableEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallRecordingEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.recording.available","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallStartedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.started","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallTariffedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.tariffed","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallTranscriptCreatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallTranscriptEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.transcript.created","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallTranscriptionCompletedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.transcription_completed","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"CallVoicemailAvailableEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/CallVoicemailEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"call.voicemail.available","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ContactSharedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ContactEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"contact.shared","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ConversationClosedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ConversationEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"conversation.closed","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ConversationInactiveEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ConversationEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"conversation.inactive","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ConversationMessageCreatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ConversationEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"conversation.message.created","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ConversationContactAssignedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ConversationEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"conversation.contact_assigned","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"TeamAvailabilityUpdatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/TeamEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"team.availability.updated","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"TranscriptCreatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/TranscriptEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"transcript.created","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"UserAvailabilityUpdatedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/UserEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"user.availability.updated","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ContentAnalysisCompletedEvent":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/ContentAnalysisEventData"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"const":"content_analysis.completed","type":"string"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"ContentAnalysis":{"additionalProperties":false,"properties":{"analyzer":{"$ref":"#/components/schemas/ContentAnalysisAnalyzer"},"artifacts":{"description":"The list of artifacts created from the analysis process","items":{"$ref":"#/components/schemas/ContentAnalysisResultArtifact"},"type":"array"},"failure":{"$ref":"#/components/schemas/ContentAnalysisFailure"},"id":{"description":"The ID of the analysis","type":"string"},"request":{"$ref":"#/components/schemas/ContentAnalysisRequest"},"status":{"$ref":"#/components/schemas/ContentAnalysisStatus"},"transcript":{"description":"The transcript content that was analyzed\n\nThe source of the value on this field depends whether `recordings` or `transcripts` are provided in the request:\n\n* If `recordings` are provided, this is the combined transcript created from the recordings.\n* If `transcripts` are provided, this is the combined transcript from the request.","type":"string"}},"required":["id","request","status"],"type":"object"},"ContentAnalysisRequest":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisCallRequest"},{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsRequest"}],"description":"The payload containing the content and related information required to be processed and analyzed."},"QueuedContentAnalysis":{"additionalProperties":false,"properties":{"analyzer":{"$ref":"#/components/schemas/ContentAnalysisAnalyzer"},"artifacts":{"description":"The list of artifacts created from the analysis process","items":{"$ref":"#/components/schemas/ContentAnalysisResultArtifact"},"type":"array"},"failure":{"$ref":"#/components/schemas/ContentAnalysisFailure"},"id":{"description":"The ID of the analysis","type":"string"},"request":{"$ref":"#/components/schemas/ContentAnalysisRequest"},"status":{"const":"queued","description":"The request is received and queued.","type":"string"},"transcript":{"description":"The transcript content that was analyzed\n\nThe source of the value on this field depends whether `recordings` or `transcripts` are provided in the request:\n\n* If `recordings` are provided, this is the combined transcript created from the recordings.\n* If `transcripts` are provided, this is the combined transcript from the request.","type":"string"}},"required":["id","request","status"],"type":"object"},"GetContentAnalysisResponse":{"additionalProperties":false,"properties":{"contentAnalysis":{"description":"The content analyses matching the filters provided as query params","items":{"$ref":"#/components/schemas/ContentAnalysis"},"type":"array"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["contentAnalysis","meta"],"type":"object"},"SpokeMiddlewareErrorResponse":{"type":"string"},"ApiGatewayValidationErrorResponse":{"type":"object","properties":{"message":{"type":"string","description":"Request validation error message"}}},"id":{"type":"string"},"Authorization":{"type":"string"},"Access-Control-Allow-Origin":{"type":"string","default":"*","example":"*"},"next":{"type":"string"},"limit":{"type":"string"},"since":{"type":"string"},"before":{"type":"string"},"sourceId":{"type":"string"},"participantId":{"type":"string"},"contactNumber":{"type":"string"},"artifact":{"type":"string"},"TranscriptResponse":{"additionalProperties":false,"properties":{"links":{"$ref":"#/components/schemas/TranscriptLinks"},"transcript":{"$ref":"#/components/schemas/Transcript"}},"required":["links","transcript"],"type":"object"},"TranscriptsResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"transcripts":{"items":{"$ref":"#/components/schemas/Transcript"},"type":"array"}},"required":["meta","transcripts"],"type":"object"},"TranscriptSegmentsResponse":{"additionalProperties":false,"properties":{"segments":{"items":{"$ref":"#/components/schemas/TranscriptSegment"},"type":"array"}},"required":["segments"],"type":"object"},"sourceContextId":{"type":"string"},"Call":{"additionalProperties":false,"properties":{"answeredAt":{"description":"Date/Time (UTC - ISO8601 format) that this call started","type":"string"},"assignedCallGroup":{"anyOf":[{"$ref":"#/components/schemas/AssignedCallGroup"},{"nullable":true}],"description":"The team assigned to the call. This is a calculated value and is determined as the last team\nthat is offered the call.\n\nThis field will be null for calls that are sent directly to users or phone numbers."},"assignedContact":{"anyOf":[{"$ref":"#/components/schemas/AssignedContact"},{"nullable":true}],"description":"The phonebook contact (if any) associated with the external party on the call."},"assignedUser":{"$ref":"#/components/schemas/AssignedCallUser"},"companyNumber":{"description":"The company number that originated or terminated this call.  This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThis field will be null for Spoke internal calls (where `isInternal` is true).","nullable":true,"type":"string"},"contactNumber":{"description":"The phone number of the external party that originated or terminated this call. Use this field\nfor CRM integration if there is no value in the `assignedContact` field and you wish to create\na new record for unknown customer numbers.\n\nPossible values:\n\n- null: This field will be blank for Spoke internal calls (where `isInternal` is true).\n- ANONYMOUS: If the external party has masked their caller id then this field will contain the value `ANONYMOUS`\n- +E164 Number: A phone number in +E164 format (e.g. +16508221060)","nullable":true,"type":"string"},"direction":{"$ref":"#/components/schemas/CallDirection"},"directoryTarget":{"$ref":"#/components/schemas/CallDirectoryEntry"},"duration":{"description":"Duration of the call in milliseconds.","type":"number"},"durationText":{"description":"Duration of the call in human readable form","type":"string"},"endedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call ended or the caller hung up","type":"string"},"forms":{"description":"A list of forms started or submitted for this call.\n\nA `Form` represents a form started or submitted by a Spoke user, during the call, at the end of the call,\nor at any time after the call has ended.","items":{"$ref":"#/components/schemas/Form"},"type":"array"},"highlights":{"description":"A list of highlights for this call.\n\nA `Highlight` represents a snapshot of the call, taken at a point in time by a Spoke user, with one or more optional tags selected.\n\nIt is possible to have multiple `Highlight`s in a call, and each `Highlight` may have multiple tags associated with it.","items":{"$ref":"#/components/schemas/Highlight"},"type":"array"},"id":{"description":"The id of the call","type":"string"},"initiator":{"description":"** DEPRECATED **. Use the `contactNumber` and `companyNumber` fields instead.","type":"string"},"isConference":{"description":"Indicates whether the call was a Spoke conference call.\n\nWebhook events `call.answered`, `call.not_answered`, `call.hungup` will not fire for calls where this field\nis set to `true`","type":"boolean"},"isInternal":{"description":"Indicates whether the call was an internal (Spoke User to Spoke User) call. If this flag is true\nthen there was no external party on the call, and the contactNumber and companyNumber fields will\nbe empty.\n\nThis field is provided to simplify integration with CRM platforms. As there is no 'customer' or external\nparty involved in the call these calls can be excluded from CRM call logs.\n\nWebhook events `call.answered`, `call.not_answered`, `call.hungup` will not fire for calls where this field\nis set to `true`","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call was last modified.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that this call record was last modified.","type":"number"},"notes":{"description":"A list of notes recorded against a call.\n\nA `Note` represents a note recorded by a Spoke user at the end of the call, or at any time after the call has ended\nThe note is first transcribed and then optionally edited by the user.\n\nIt is possible to store multiple `Note`s against a call, and each `Note` can have multiple `NoteContent`\nitems for each paragraph of text recorded.","items":{"$ref":"#/components/schemas/Note"},"type":"array"},"outcome":{"$ref":"#/components/schemas/CallOutcome"},"parties":{"description":"A list of the parties on this call. Each call will consist of at least one, and possibly many, call parties.\n\nA call party represents a `User`, `Device` or in the case of external parties, an E164 PSTN phone number.\n\nIt is possible for a party to leave and then rejoin a call via transfer or conference. Each instance of\nthe party joining the call is represented by a separate entry in the `connections` attribute of the\ncall party.","items":{"$ref":"#/components/schemas/CallParty"},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the call. Use passthrough parameters to initiate and trace calls from other\nsystems.\n\nPassthrough parameters can be associated with a call via the following mechanisms.\n\n* Deep linking - dialing a call via the Spoke App\n* Redirect - redirecting a call to Spoke from Twilio\n* Data Action - returning passthrough parameters in response to a call related data action request.\n\nThe parameter names and values are URL decoded, safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"recipient":{"description":"** DEPRECATED **. Use the `contactNumber` and `companyNumber` fields instead.","type":"string"},"recordings":{"description":"All recordings associated with this call.\n\nIt is possible for a call to have more than one recording if the organisation has the ad-hoc\nrecording option enabled.  This option allows users to toggle recording on and off during the\ncall. In this case there will be one recording per \"on\" period.","items":{"$ref":"#/components/schemas/Recording"},"type":"array"},"startedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call started.","type":"string"},"startedTimestamp":{"description":"Unix timestamp that this call was started","type":"number"},"status":{"description":"Status of the call. One of the following values:\n\n* `started`\n* `offered`\n* `missed`\n* `accepted`\n* `ended`\n* `abandoned`\n* `blocked`","type":"string"},"summary":{"$ref":"#/components/schemas/CallSummary"},"tariff":{"$ref":"#/components/schemas/Tariff"},"user":{"$ref":"#/components/schemas/FirstCallUser"},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorCallId":{"description":"The vendor's identifier for the call. The value of this field is dependent\non the value of the `vendor` field:\n\n* `twilio`: the `CallSid` of the parent call","type":"string"},"voicemail":{"$ref":"#/components/schemas/Voicemail"},"waitTime":{"description":"The length of time in milliseconds the first caller waited prior to the call being answered by a `user` or an external party.\n\nIf the call was answered, this field is calculated as the time difference between `startedAt` and `answeredAt`,\nwhere `startedAt` is the time that the call started on the Spoke platform.\n\nFor inbound calls, if the customer has interacted with the Spoke IVR, then wait time will include the IVR interaction time.\n\nFor unanswered calls this field is equivalent to the duration of the call.","type":"number"},"waitTimeText":{"description":"Wait time of the call in human readable form","type":"string"}},"required":["direction","id","initiator","isConference","isInternal","lastModifiedAt","lastModifiedTimestamp","recipient","startedAt","startedTimestamp","status","summary"],"type":"object"},"Calls":{"additionalProperties":false,"properties":{"calls":{"items":{"$ref":"#/components/schemas/Call"},"type":"array"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["calls","meta"],"type":"object"},"Recording":{"additionalProperties":false,"properties":{"callId":{"description":"The ID of the call this recording belongs to","type":"string"},"channels":{"$ref":"#/components/schemas/RecordingChannels"},"duration":{"description":"Duration of the call recording in seconds","type":"number"},"fileSize":{"description":"The size of the call recording file in bytes","type":"number"},"id":{"description":"The ID of the call recording","type":"string"},"mimeType":{"$ref":"#/components/schemas/RecordingMimeType"},"startedAt":{"description":"Date/Time (UTC - ISO8601 format) when the call recording started","type":"string"},"transcript":{"$ref":"#/components/schemas/CallRecordingTranscript"},"url":{"description":"URL of the recording for retrieval.\n\nThe URL is a signed URL that expires six hours after the call was recorded. To get a newly signed URL, GET the call resource from the `/calls/:id` API\nendpoint.\n\nIf the query parameter `includeRecordingUrl` is set to false, this will be omitted.","type":"string"}},"required":["callId","channels","duration","fileSize","id","mimeType","startedAt"],"type":"object"},"modified":{"type":"string"},"includeActive":{"type":"string"},"includeRecordingUrl":{"type":"string"},"sortOrder":{"type":"string"},"recordingId":{"type":"string"},"Attributes":{"additionalProperties":false,"properties":{"note":{"description":"Content of the note.","type":"string","nullable":true},"noteClientVisibility":{"description":"Which clients the note is visible in.\n\nThis field is an array containing one or more of the following values:\n\n - ***mobile***: When this value is present, the note will be visible in the Spoke Phone app on both iOS and Android\n - ***desktop***: When this value is present, the note will be visible in the Spoke Phone app on both Mac and Windows\n - ***speedy***: When this value is present, the note will be visible in Spoke Speedy for Twilio Flex.","items":{"$ref":"#/definitions/NoteClientVisibilityEnum"},"type":"array","nullable":true},"noteEndTimestamp":{"description":"Unix timestamp of the end time of the note.\n\nCan be used in clients to specify when the note stops being visible.\n\nThis value is used for visibility of a note on `mobile`, `desktop` and `speedy` clients.","type":"number","nullable":true},"noteStartTimestamp":{"description":"Unix timestamp of the start time of the note.\n\nCan be used in clients to specify when the note becomes visible.\n\nThis value is used for visibility of a note on `mobile`, `desktop` and `speedy` clients.","type":"number","nullable":true},"noteType":{"description":"Type of the note.","enum":["general","important"],"type":"string","nullable":true}},"type":"object"},"AttributeResponse":{"additionalProperties":false,"properties":{"attributeId":{"description":"The ID of the note","type":"string"},"directoryEntryId":{"description":"The ID of the directory entry that the note belongs to","type":"string"},"directoryEntryType":{"$ref":"#/definitions/DirectoryEntryTypeEnum","description":"The type of the directory entry that the note belongs to"},"note":{"description":"Content of the note.","type":"string","nullable":true},"noteClientVisibility":{"description":"Which clients the note is visible in.\n\nThis field is an array containing one or more of the following values:\n\n - ***mobile***: When this value is present, the note will be visible in the Spoke Phone app on both iOS and Android\n - ***desktop***: When this value is present, the note will be visible in the Spoke Phone app on both Mac and Windows\n - ***speedy***: When this value is present, the note will be visible in Spoke Speedy for Twilio Flex.","items":{"$ref":"#/definitions/NoteClientVisibilityEnum"},"type":"array","nullable":true},"noteEndTimestamp":{"description":"Unix timestamp of the end time of the note.\n\nCan be used in clients to specify when the note stops being visible.\n\nThis value is used for visibility of a note on `mobile`, `desktop` and `speedy` clients.","type":"number","nullable":true},"noteStartTimestamp":{"description":"Unix timestamp of the start time of the note.\n\nCan be used in clients to specify when the note becomes visible.\n\nThis value is used for visibility of a note on `mobile`, `desktop` and `speedy` clients.","type":"number","nullable":true},"noteType":{"description":"Type of the note.","enum":["general","important"],"type":"string","nullable":true},"organisationId":{"description":"The ID of the organisation that the note belongs to","type":"string"}},"required":["attributeId","directoryEntryId","directoryEntryType","organisationId"],"type":"object"},"DirectoryResponse":{"additionalProperties":false,"properties":{"entries":{"description":"The list of directory entries returned by the query. Entries can be any of `UserWithAvailability`, `TeamWithAvailability`, `Device`, `TrunkUser`, `TrunkDevice`, `TrunkQueue` types. The entry `type` discriminator is used to determine the object type.","items":{"$ref":"#/components/schemas/DirectoryEntry"},"type":"array"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["entries","meta"],"type":"object"},"DirectoryEntry":{"anyOf":[{"$ref":"#/components/schemas/Device"},{"$ref":"#/components/schemas/UserWithAvailability"},{"$ref":"#/components/schemas/TeamWithAvailability"},{"$ref":"#/components/schemas/TrunkUser"},{"$ref":"#/components/schemas/TrunkDevice"},{"$ref":"#/components/schemas/TrunkQueue"}]},"SearchResponse":{"additionalProperties":false,"properties":{"entries":{"description":"The list of search result entries returned by the query.\n\nEntries can be any of `UserWithAvailability`, `TeamWithAvailability`, `Device`, `TrunkUser`, `TrunkDevice`, `TrunkQueue` or `Contact` types. The entry `type` discriminator is used to determine the object type.","items":{"$ref":"#/components/schemas/SearchResult"},"type":"array"}},"required":["entries"],"type":"object"},"ListContactsResponse":{"additionalProperties":false,"properties":{"entries":{"description":"The list of directory contact entries","items":{"$ref":"#/components/schemas/PhonebookContactDirectoryEntry"},"type":"array"},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["entries","meta"],"type":"object"},"UserWithAvailability":{"additionalProperties":false,"properties":{"availability":{"$ref":"#/components/schemas/Availability"},"desktopEnrolledReleaseChannel":{"$ref":"#/components/schemas/DesktopReleaseChannel"},"displayName":{"description":"User’s name as it appears in the Spoke Directory","type":"string"},"email":{"description":"User's email address (as registered in Spoke)","type":"string"},"extension":{"description":"User's extension","type":"string"},"firstName":{"description":"User's first name","type":"string"},"id":{"description":"The id of the user","type":"string"},"isDirectorySynced":{"description":"Indicates whether the user is managed via the organisation's employee directory platform.","type":"boolean"},"jobTitle":{"description":"User's job title (as registered in Spoke)","type":"string"},"licenses":{"description":"The names of the licenses assigned to this user.","items":{"$ref":"#/components/schemas/LicenseName"},"type":"array"},"lastName":{"description":"User's last name","type":"string"},"location":{"description":"User’s location (as registered in Spoke)","type":"string"},"loginStatus":{"$ref":"#/components/schemas/LoginStatus"},"manager":{"$ref":"#/components/schemas/ManagerUserDirectoryEntry"},"mobile":{"description":"User's mobile number (as registered in Spoke)\n\nThis will be omitted if the organisation is configured to exclude mobile numbers from API responses","type":"string"},"phoneNumbers":{"description":"The list of phone numbers (DIDs) associated with this user","items":{"$ref":"#/components/schemas/DirectoryPhoneNumber"},"type":"array"},"status":{"description":"The current registration status of the user.  Will be one of `invited`, `active` or `suspended`","type":"string"},"teams":{"description":"The list of team names that the user is a member of","items":{"type":"string"},"type":"array"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"user","type":"string"}},"required":["desktopEnrolledReleaseChannel","displayName","id","isDirectorySynced","loginStatus","phoneNumbers","status","type"],"type":"object"},"UsersWithAvailability":{"items":{"$ref":"#/components/schemas/UserWithAvailability"},"type":"array"},"Trunk":{"additionalProperties":false,"properties":{"allowSipFromAddress":{"description":"The trunk ip addresses, for traffic from your network into spoke","items":{"type":"string"},"type":"array"},"id":{"description":"The id of the trunk","type":"string"},"name":{"description":"The name of the trunk","type":"string"},"region":{"description":"The trunk region","type":"string"},"sendSipToAddress":{"description":"The IP address/FQDN, for traffic from Spoke into your network","type":"string"},"sipDomainName":{"description":"The trunks sip domain name, this SIP domain uniquely identifies your account on Spoke","type":"string"}},"required":["allowSipFromAddress","id","name","region","sendSipToAddress","sipDomainName"],"type":"object"},"TrunksResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"trunks":{"items":{"$ref":"#/components/schemas/Trunk"},"type":"array"}},"required":["meta","trunks"],"type":"object"},"TrunkDevice":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"displayName":{"description":"The display name of this directory entry.","type":"string"},"extension":{"description":"The device's extension","type":"string"},"externalId":{"description":"The external ID of the device","type":"string"},"id":{"description":"The ID of the device","type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"},"sipAddress":{"description":"The device's address (SIP)","type":"string"},"trunkId":{"description":"The trunk ID that the device belongs to","type":"string"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"trunkDevice","type":"string"}},"required":["displayName","extension","externalId","id","name","sipAddress","trunkId","type"],"type":"object"},"TrunkUser":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"displayName":{"description":"The display name of this directory entry.","type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"extension":{"description":"The user's extension","type":"string"},"externalId":{"description":"The external ID of the user","type":"string"},"fullName":{"description":"The user's full name","type":"string"},"id":{"description":"The ID of the user","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"},"sipAddress":{"description":"The users SIP address","type":"string"},"trunkId":{"description":"The trunk ID that the user belongs to","type":"string"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"trunkUser","type":"string"}},"required":["displayName","extension","externalId","fullName","id","sipAddress","trunkId","type"],"type":"object"},"TrunkQueue":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"displayName":{"description":"The display name of this directory entry.","type":"string"},"extension":{"description":"The queue's extension","type":"string"},"externalId":{"description":"The external ID of the queue","type":"string"},"id":{"description":"The ID of the queue","type":"string"},"name":{"description":"The queue's name","type":"string"},"sipAddress":{"description":"The queue's address (SIP)","type":"string"},"trunkId":{"description":"The trunk ID that the queue belongs to","type":"string"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"trunkQueue","type":"string"}},"required":["displayName","extension","externalId","id","name","sipAddress","trunkId","type"],"type":"object"},"TrunkDevicesResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"trunkDevices":{"items":{"$ref":"#/components/schemas/TrunkDevice"},"type":"array"}},"required":["meta","trunkDevices"],"type":"object"},"TrunkUsersResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"trunkUsers":{"items":{"$ref":"#/components/schemas/TrunkUser"},"type":"array"}},"required":["meta","trunkUsers"],"type":"object"},"TrunkQueuesResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"trunkQueues":{"items":{"$ref":"#/components/schemas/TrunkQueue"},"type":"array"}},"required":["meta","trunkQueues"],"type":"object"},"CreateTrunkDeviceBody":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"extension":{"description":"The device's extension","type":"string"},"externalId":{"description":"The external ID of the device","type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"required":["extension","externalId","name"],"type":"object"},"CreateTrunkUserBody":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"extension":{"description":"The user's extension","type":"string"},"externalId":{"description":"The external ID of the user","type":"string"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"}},"required":["extension","externalId","fullName"],"type":"object"},"CreateTrunkQueueBody":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"extension":{"description":"The queue's extension","type":"string"},"externalId":{"description":"The external ID of the queue","type":"string"},"name":{"description":"The queue's name","type":"string"}},"required":["extension","externalId","name"],"type":"object"},"UpdateTrunkDeviceBody":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"type":"object"},"UpdateTrunkDeviceByExternalIdBody":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"externalId":{"description":"The external ID of the device to update","type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"required":["externalId"],"type":"object"},"UpdateTrunkUserBody":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"}},"type":"object"},"UpdateTrunkUserByExternalIdBody":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"externalId":{"description":"The external ID of the user to update","type":"string"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"}},"required":["externalId"],"type":"object"},"UpdateTrunkQueueBody":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"name":{"description":"The queue's name","type":"string"}},"type":"object"},"UpdateTrunkQueueByExternalIdBody":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"externalId":{"description":"The external ID of the queue to update","type":"string"},"name":{"description":"The queue's name","type":"string"}},"required":["externalId"],"type":"object"},"UpsertTeamUserBody":{"anyOf":[{"additionalProperties":false,"properties":{"ringFirst":{"description":"Controls whether the user is in the team's 'call first' group when people\ncall this team, according to the team's calling rules. Defaults to true.","type":"boolean"}},"type":"object"},{"nullable":true}]},"TeamsResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"teams":{"description":"The list of teams returned by the query.","items":{"$ref":"#/components/schemas/TeamWithAvailability"},"type":"array"}},"required":["meta","teams"],"type":"object"},"extension":{"type":"string"},"phoneNumber":{"type":"string"},"ivrKey":{"type":"string"},"includeSuspendedUsers":{"type":"string"},"includeHiddenCallGroups":{"type":"string"},"entryId":{"type":"string"},"email":{"type":"string"},"trunkId":{"type":"string"},"externalId":{"type":"string"},"trunkDeviceId":{"type":"string"},"trunkUserId":{"type":"string"},"trunkQueueId":{"type":"string"},"teamId":{"type":"string"},"userId":{"type":"string"},"query":{"type":"string"},"type":{"type":"string"},"phonebook":{"type":"string"},"includeAssigned":{"type":"string"},"CreatePhonebookRequest":{"additionalProperties":false,"properties":{"contacts":{"description":"The list of contacts belonging to this phonebook","items":{"$ref":"#/components/schemas/ContactInput"},"type":"array"},"countryIso":{"description":"Country ISO code for formatting local phone numbers. Must be set if contacts are given","nullable":true,"type":"string"},"description":{"description":"The description of the phonebook","type":"string"},"name":{"description":"The name of the phonebook","type":"string"}},"required":["name"],"type":"object"},"UpdatePhonebookRequest":{"additionalProperties":false,"properties":{"contacts":{"description":"The list of contacts belonging to this phonebook","items":{"$ref":"#/components/schemas/ContactInput"},"type":"array"},"countryIso":{"description":"Country ISO code for formatting local phone numbers. Must be set if contacts are given","nullable":true,"type":"string"},"description":{"description":"The description of the phonebook","type":"string"},"name":{"description":"The name of the phonebook","type":"string"}},"type":"object"},"Phonebook":{"additionalProperties":false,"properties":{"description":{"description":"The description of the phonebook","type":"string"},"id":{"description":"ID of the phonebook","type":"string"},"managedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"name":{"description":"The name of the phonebook","type":"string"},"owner":{"$ref":"#/components/schemas/PhonebookOwner"},"ownerId":{"description":"** DEPRECATED **. Refer to `owner` field instead.","type":"string"},"sourceId":{"description":"ID of the phonebook's source","type":"string"},"uploaded":{"description":"UTC timestamp of the latest upload time","type":"number"}},"required":["id","managedBy","name","owner","ownerId","uploaded"],"type":"object"},"PhonebooksWithContacts":{"items":{"$ref":"#/components/schemas/Omit_PhonebookWithContacts_meta_"},"type":"array"},"PhonebookWithContacts":{"additionalProperties":false,"properties":{"contacts":{"description":"The list of contacts belonging to the phonebook. May be empty if no matched contacts are found.","items":{"$ref":"#/components/schemas/Contact"},"type":"array"},"description":{"description":"The description of the phonebook","type":"string"},"id":{"description":"ID of the phonebook","type":"string"},"managedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"name":{"description":"The name of the phonebook","type":"string"},"owner":{"$ref":"#/components/schemas/PhonebookOwner"},"ownerId":{"description":"** DEPRECATED **. Refer to `owner` field instead.","type":"string"},"sourceId":{"description":"ID of the phonebook's source","type":"string"},"uploaded":{"description":"UTC timestamp of the latest upload time","type":"number"}},"required":["contacts","id","managedBy","name","owner","ownerId","uploaded"],"type":"object"},"AddOrUpdateContactRequest":{"additionalProperties":false,"properties":{"contact":{"$ref":"#/components/schemas/ContactInput"},"countryIso":{"description":"Country ISO code for formatting local phone numbers","nullable":true,"type":"string"}},"required":["contact"],"type":"object"},"Contact":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookManagedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"},"phonebookOwner":{"$ref":"#/components/schemas/PhonebookOwner"}},"required":["id","phoneNumbers","phonebookId","phonebookManagedBy","phonebookOwner"],"type":"object"},"search":{"type":"string"},"excludeEmpty":{"type":"string"},"contactId":{"type":"string"},"CreateMessageBody":{"additionalProperties":false,"properties":{"body":{"description":"The content of the message, can be up to 1,600 characters long","type":"string"},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","nullable":true,"type":"string"},"conversationName":{"description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long.","nullable":true,"type":"string"},"from":{"description":"Either the user’s email address, or their SMS enabled DDI (in +E164 form).\nIf an email address is provided, we will automatically use the user’s default SMS DDI","type":"string"},"notifyUsers":{"description":"Controls whether notifications for this message are sent to users.\n\nWhen a conversation already exists between the company address and the contact address,\nsetting `notifyUsers` to `false` will still notify the existing participants.","nullable":true,"type":"boolean"},"passthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"to":{"description":"The recipient’s phone number in +E164 form, e.g. +61488881234 or +155512345678","type":"string"}},"required":["body","from","to"],"type":"object"},"CreateMessageResponse":{"additionalProperties":false,"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"},"CreateTeamMessageBody":{"anyOf":[{"$ref":"#/components/schemas/CreateSmsTeamMessageBody"},{"$ref":"#/components/schemas/CreateGroupMmsTeamMessageBody"}]},"CreateTeamMessageResponse":{"additionalProperties":false,"properties":{"hasExistingConversation":{"description":"Indicates whether the conversation already existed before this message was sent.\nIf `true`, the message was added to an existing conversation.\nIf `false`, a new conversation was created for this message.","type":"boolean"},"vendor":{"description":"The CPaaS vendor that carried the message. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier of the conversation associated with the message that was created. The\nvalue of this field is dependent on the value of the `vendor` field:\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"},"vendorMessageId":{"description":"The vendor's identifier of the message that was created. The value of this field is dependent\non the value of the `vendor` field:\n\n* `twilio`: the `MessageSid` of the message\n\nThis field will be undefined if a new Group MMS conversation was created for this message.\nIn this case, you should subscribe to the `conversation.message.created` webhook event to retrieve the message details when it is created asynchronously.","nullable":true,"type":"string"}},"required":["hasExistingConversation","vendor","vendorConversationId"],"type":"object"},"CreateConversationMessageBody":{"additionalProperties":false,"properties":{"assignUsers":{"description":"Required if routingAction is `assign_users`.  A list of user email addresses to assign to the conversation.\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.\nAssignment behaviour depends on the value of routingAction:\n\n* `assign_users`: Only assign the users defined in the request payload\n\n* `assign_owner`: Assign the users defined in the request payload in addition to the owner's users.","items":{"type":"string"},"type":"array"},"claimRule":{"description":"If provided, sets the claim rule for a newly created conversation. The value is ignored if the conversation already exists.","enum":["claimable","not_claimable","required_before_reply"],"type":"string"},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","type":"string"},"contactAddresses":{"description":"The numbers of the contacts to send the message to. Must be in +E164 format.\n\nIf more than one contact address is provided, the message is sent as a Group MMS message.","items":{"type":"string"},"type":"array"},"conversationName":{"description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long.","type":"string"},"messageContent":{"$ref":"#/components/schemas/CreateMessageContent"},"notificationMode":{"description":"Controls notification and unread indicators for API-delivered messages.\n\nDefaults to `notify_unread`.\n\nValues:\n\n* `notify_unread`: Sends a system notification and keeps the message unread.\nUse for messages that need immediate attention.\n\n* `silent_unread`: Suppresses system notifications and keeps the message unread.\nUse for bulk messages that users can check later.\n\n* `silent_read`: Suppresses system notifications and marks the message as read\nunless the conversation already has existing unread messages. Use for background delivery.","enum":["notify_unread","silent_read","silent_unread"],"type":"string"},"passthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"routingAction":{"description":"Defines whether to assign users to the conversation that is created as a result of the message.\n\nPossible values:\n* `assign_users`: Assign the conversation to one or more Spoke users.  If this value is used, the assignUsers parameter must be non-empty\n\n* `do_not_route`: Do not assign any Spoke users to the conversation.  If the customer replies, no one will be able to respond to the customer\n\n* `assign_owner`: Assign the conversation to the owner of the company address.  Currently supports team and member owners only.","enum":["assign_owner","assign_users","do_not_route"],"type":"string"},"sender":{"$ref":"#/components/schemas/CreateConversationMessageSender"}},"required":["contactAddresses","messageContent","sender"],"type":"object"},"CreateConversationMessageResponse":{"additionalProperties":false,"properties":{"hasExistingConversation":{"description":"Indicates whether the conversation already existed before this message was sent.\nIf `true`, the message was added to an existing conversation.\nIf `false`, a new conversation was created for this message.","type":"boolean"},"vendor":{"description":"The CPaaS vendor that carried the message. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier of the conversation associated with the message that was created. The\nvalue of this field is dependent on the value of the `vendor` field:\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"},"vendorMessageId":{"description":"The vendor's identifier of the message that was created. The value of this field is dependent\non the value of the `vendor` field:\n\n* `twilio`: the `MessageSid` of the message\n\nThis field will be undefined if a new Group MMS conversation was created for this message.\nIn this case, you should subscribe to the `conversation.message.created` webhook event to retrieve the message details when it is created asynchronously.","type":"string"}},"required":["hasExistingConversation","vendor","vendorConversationId"],"type":"object"},"direcApiGa1RTWP6KYH0J16":{"type":"object","required":["externalId"],"properties":{"emails":{"type":"array","description":"The optional list of emails","items":{"type":"object","properties":{"emailAddress":{"type":"string","description":"The email address"},"label":{"type":"string","description":"The email label e.g. work, personal"}},"required":["emailAddress"]}},"externalId":{"type":"string","description":"The external ID of the user to update"},"fullName":{"type":"string","description":"The user's full name"},"phoneNumbers":{"type":"array","description":"The optional list of phone numbers","items":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number"},"assignToUser":{"type":"boolean","description":"Flag to signify whether this phone number can be used by the assigned user in the spoke platform.\nSetting this flag will automatically create the phone number in the spoke phone numbers table and attach the phone number to the assigned user.\nThis requires either `assignToUserEmail` or `assignToUserId` to be provided."},"label":{"type":"string","description":"The number label e.g. work, home"}},"required":["phoneNumber"]}}}},"direcApiGaMX25GAIEFDVH":{"type":"object","properties":{"emails":{"type":"array","description":"The optional list of emails","items":{"type":"object","properties":{"emailAddress":{"type":"string","description":"The email address"},"label":{"type":"string","description":"The email label e.g. work, personal"}},"required":["emailAddress"]}},"fullName":{"type":"string","description":"The user's full name"},"phoneNumbers":{"type":"array","description":"The optional list of phone numbers","items":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number"},"assignToUser":{"type":"boolean","description":"Flag to signify whether this phone number can be used by the assigned user in the spoke platform.\nSetting this flag will automatically create the phone number in the spoke phone numbers table and attach the phone number to the assigned user.\nThis requires either `assignToUserEmail` or `assignToUserId` to be provided."},"label":{"type":"string","description":"The number label e.g. work, home"}},"required":["phoneNumber"]}}}},"direcApiGaC2VOE2NTGGOF":{"type":"object","required":["externalId"],"properties":{"name":{"type":"string","description":"The device's name"},"externalId":{"type":"string","description":"The external ID of the device to update"}}},"converApiGalO4X7zOo6qnu":{},"directApiGaymIA3ltYC8l1":{"type":"object"},"webhooApiGalWtfikYOglbk":{"type":"object","properties":{"mode":{"type":"string","description":"The webhook mode. Default value is `production`","enum":["production","test"]},"description":{"type":"string","description":"The description of the webhook"},"enabled":{"type":"boolean","description":"Whether the webhook is enabled. Default value is `true`"},"events":{"type":"array","description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","items":{"type":"string","description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `call.transcription_completed`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`"}},"url":{"type":"string","description":"The URL of the webhook. Must be a valid HTTPS URL"}}},"webhooApiGa7SDyrnKl7OiT":{"type":"object","required":["events","url"],"properties":{"mode":{"type":"string","description":"The webhook mode. Default value is `production`","enum":["production","test"]},"description":{"type":"string","description":"The description of the webhook"},"enabled":{"type":"boolean","description":"Whether the webhook is enabled. Default value is `true`"},"events":{"type":"array","description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","items":{"type":"string","description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `call.transcription_completed`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`"}},"url":{"type":"string","description":"The URL of the webhook. Must be a valid HTTPS URL"}}},"direcApiGa1H4EZP7GDZNKZ":{"type":"object","required":["extension","externalId","fullName"],"properties":{"emails":{"type":"array","description":"The optional list of emails","items":{"type":"object","properties":{"emailAddress":{"type":"string","description":"The email address"},"label":{"type":"string","description":"The email label e.g. work, personal"}},"required":["emailAddress"]}},"extension":{"type":"string","description":"The user's extension"},"externalId":{"type":"string","description":"The external ID of the user"},"fullName":{"type":"string","description":"The user's full name"},"phoneNumbers":{"type":"array","description":"The optional list of phone numbers","items":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"The phone number"},"assignToUser":{"type":"boolean","description":"Flag to signify whether this phone number can be used by the assigned user in the spoke platform.\nSetting this flag will automatically create the phone number in the spoke phone numbers table and attach the phone number to the assigned user.\nThis requires either `assignToUserEmail` or `assignToUserId` to be provided."},"label":{"type":"string","description":"The number label e.g. work, home"}},"required":["phoneNumber"]}}}},"direcApiGaEL6CBAVAKJ0B":{"type":"object","properties":{"name":{"type":"string","description":"The queue's name"}}},"phonebApiGaA6mYf9cRNWhs":{"type":"object","required":["contact"],"properties":{"contact":{"type":"object","description":"The contact","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}},"phonebApiGaWKEgB6g3LIlm":{"type":"object","properties":{"name":{"type":"string","description":"The name of the phonebook"},"description":{"type":"string","description":"The description of the phonebook"},"contacts":{"type":"array","description":"The list of contacts belonging to this phonebook","items":{"type":"object","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}}},"converApiGaiZN10Ax4ze8G":{"type":"object","required":["body","from","to"],"properties":{"passthroughParameters":{"type":"object","description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{}},"from":{"type":"string","description":"Either the user’s email address, or their SMS enabled DDI (in +E164 form).\nIf an email address is provided, we will automatically use the user’s default SMS DDI"},"to":{"type":"string","description":"The recipient’s phone number in +E164 form, e.g. +61488881234 or +155512345678"},"body":{"type":"string","description":"The content of the message, can be up to 1,600 characters long"}}},"direcApiGa1HYGVL1LUKICH":{"type":"object","required":["extension","externalId","name"],"properties":{"extension":{"type":"string","description":"The queue's extension"},"name":{"type":"string","description":"The queue's name"},"externalId":{"type":"string","description":"The external ID of the queue"}}},"dataaApiGawnl3ewRiMe1Y":{"type":"object","required":["actionType"],"properties":{"actionType":{"type":"string","description":"The type of the data action.\n\nPossible values:\n\n- outboundCall\n- insight\n- inboundCall\n- callGroup\n- inboundConversation","enum":["callGroup","inboundCall","inboundConversation","insight","outboundCall"]}}},"direcApiGaIR4XXFL9NZ3I":{"type":"object","required":["externalId"],"properties":{"name":{"type":"string","description":"The queue's name"},"externalId":{"type":"string","description":"The external ID of the queue to update"}}},"phonebApiGaYkLsHnxDOVDL":{"type":"object","required":["contact"],"properties":{"contact":{"type":"object","description":"The contact","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}},"phonebApiGaQcZ2T97dZR2d":{"type":"object","properties":{"name":{"type":"string","description":"The name of the phonebook"},"description":{"type":"string","description":"The description of the phonebook"},"contacts":{"type":"array","description":"The list of contacts belonging to this phonebook","items":{"type":"object","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}}},"phonebApiGa1OYsZHkM06EM":{"type":"object","required":["contact"],"properties":{"contact":{"type":"object","description":"The contact","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}},"phonebApiGamQ2bSt57Se2J":{"type":"object","required":["contact"],"properties":{"contact":{"type":"object","description":"The contact","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}},"aipipApiGaCp4QxMNNpyKv":{"type":"object","properties":{"organisationId":{"type":"string","description":"ID of the Spoke organisation"},"timezone":{"type":"string","description":"Default timezone used when performing a content analysis. It must follow the IANA format, e.g. `America/New_York`"},"profiles":{"type":"array","description":"A list of profiles, which describe which lens group to use for a given set of users when performing a content analysis","items":{"type":"object","properties":{"name":{"type":"string","description":"The name of the lens group to apply when this profile is applied, e.g. `freight-and-logistics`\n\nThis name and the namespace will be used to identify the lenses when performing a content analysis."},"namespace":{"type":"string","description":"The namespace of the lens group. For example, this may be the `organisationId` for organisation-specific lens groups.\n\nIf provided, the lens group name must refer to a valid lens group within the namespace.\nIf not provided, the lens group name must refer to a valid global lens group."},"users":{"type":"array","description":"A list of email addresses of users to apply the profile to","items":{"type":"string"}}},"required":["name","users"]}},"description":{"type":"string","description":"Description of the organisation"},"locale":{"type":"string","description":"Default locale used when performing a content analysis, e.g. `en-US`"}}},"phonebApiGacnb5spFhrWkO":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the phonebook"},"description":{"type":"string","description":"The description of the phonebook"},"contacts":{"type":"array","description":"The list of contacts belonging to this phonebook","items":{"type":"object","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}}},"converApiGamQ0u7vaJSEB4":{"type":"object","required":["contactAddresses","messageContent"],"properties":{"assignUsers":{"type":"array","description":"Required if routingAction is `assign_users`.  A list of user email addresses to assign to the conversation.\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.\nAssignment behaviour depends on the value of routingAction:\n\n* `assign_users`: Only assign the users defined in the request payload\n\n* `assign_owner`: Assign the users defined in the request payload in addition to the owner's users.","items":{"type":"string"}},"contactAddresses":{"type":"array","description":"The numbers of the contacts to send the message to. Must be in +E164 format.\n\nIf more than one contact address is provided, the message is sent as a Group MMS message.","items":{"type":"string"}},"closeTimer":{"type":"string","description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)"},"conversationName":{"type":"string","description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long."},"notificationMode":{"type":"string","description":"Controls notification and unread indicators for API-delivered messages.\n\nDefaults to `notify_unread`.\n\nValues:\n\n* `notify_unread`: Sends a system notification and keeps the message unread.\nUse for messages that need immediate attention.\n\n* `silent_unread`: Suppresses system notifications and keeps the message unread.\nUse for bulk messages that users can check later.\n\n* `silent_read`: Suppresses system notifications and marks the message as read\nunless the conversation already has existing unread messages. Use for background delivery.","enum":["notify_unread","silent_read","silent_unread"]},"passthroughParameters":{"type":"object","description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{}},"routingAction":{"type":"string","description":"Defines whether to assign users to the conversation that is created as a result of the message.\n\nPossible values:\n* `assign_users`: Assign the conversation to one or more Spoke users.  If this value is used, the assignUsers parameter must be non-empty\n\n* `do_not_route`: Do not assign any Spoke users to the conversation.  If the customer replies, no one will be able to respond to the customer\n\n* `assign_owner`: Assign the conversation to the owner of the company address.  Currently supports team and member owners only.","enum":["assign_owner","assign_users","do_not_route"]},"claimRule":{"type":"string","description":"If provided, sets the claim rule for a newly created conversation. The value is ignored if the conversation already exists.","enum":["claimable","not_claimable","required_before_reply"]},"messageContent":{"type":"object","description":"The content of the message","properties":{"body":{"type":"string","description":"The content of the message.  Can be up to 1600 characters long.  Messages longer than 160 characters will incur a\nper-message for each 160 character block."}},"required":["body"]}}},"phonebApiGaItnfBdEA3c7n":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the phonebook"},"description":{"type":"string","description":"The description of the phonebook"},"contacts":{"type":"array","description":"The list of contacts belonging to this phonebook","items":{"type":"object","properties":{"emails":{"type":"array","description":"Optional list of emails of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}},"id":{"type":"string","description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID."},"phoneNumbers":{"type":"array","description":"List of phone numbers of the contact","items":{"type":"object","properties":{"label":{"type":"string","description":"Label for the data"},"value":{"type":"string","description":"Data value"}},"required":["label","value"]}}},"required":["phoneNumbers"]}}}},"direcApiGaQ3OXIV91DY9E":{"type":"object","properties":{"name":{"type":"string","description":"The device's name"}}},"direcApiGaYEZMWKN3L20J":{"type":"object","required":["extension","externalId","name"],"properties":{"extension":{"type":"string","description":"The device's extension"},"name":{"type":"string","description":"The device's name"},"externalId":{"type":"string","description":"The external ID of the device"}}},"directApiGaiD3ADzl7trOe":{},"AbandonedCallReason":{"enum":["earlyOfferAbandon","ivrAbandon"],"type":"string"},"AgentScorecardsSourceData":{"additionalProperties":false,"description":"The source data when type is `agentScorecards`. Contains the agent, team,\nand lens that define the scope of the aggregated scorecards.","properties":{"agent":{"additionalProperties":false,"description":"The agent whose scorecards are being analyzed.","properties":{"email":{"description":"The agent's email address","type":"string"},"name":{"description":"The agent's display name","type":"string"}},"required":["email","name"],"type":"object"},"lens":{"additionalProperties":false,"description":"The conversation lens used to score the agent's calls.","properties":{"definitionFilePath":{"description":"The path to the internally managed lens definition file asset.","type":"string"},"name":{"description":"The display name of the lens, e.g. \"Acme Insurance New Business & Sales\"","type":"string"}},"required":["definitionFilePath","name"],"type":"object"},"team":{"additionalProperties":false,"description":"The team the agent's scorecards are being analyzed against.","properties":{"id":{"description":"The team ID","type":"string"},"name":{"description":"The team name","type":"string"}},"required":["id"],"type":"object"}},"required":["agent","lens","team"],"type":"object"},"AlertNotificationMessage":{"additionalProperties":false,"properties":{"body":{"type":"string"},"category":{"$ref":"#/components/schemas/NotificationCategories"},"isAlert":{"const":true,"type":"boolean"},"localId":{"description":"Android local notification ID","type":"number"},"notificationId":{"description":"iOS notification ID","type":"string"},"title":{"type":"string"}},"required":["body","category","isAlert","localId","notificationId","title"],"type":"object"},"Api.Name":{"enum":["Call","Conversation","DataAction","Directory","Phonebook","Transcription"],"type":"string"},"Api.Version":{"enum":["2021-06-01","2024-06-01"],"type":"string"},"ApiRequestContext":{"additionalProperties":false,"properties":{"apiVersion":{"$ref":"#/components/schemas/ApiVersion"},"authIdentity":{"$ref":"#/components/schemas/AuthIdentity"}},"required":["authIdentity"],"type":"object"},"ApiRequestHeaders":{"additionalProperties":false,"properties":{"Authorization":{"description":"A valid bearer token generated from the client ID and secret e.g. Bearer {access_token}","examples":["Bearer eyJraWQi.....57PJg"],"type":"string"},"Spoke-Api-Version":{"description":"An optional API name and version","examples":["Directory/2021-06-01"],"type":"string"}},"required":["Authorization"],"type":"object"},"ApiVersion":{"additionalProperties":false,"description":"Service middleware parses the Spoke-Api-Version header into this object\ne.g\n- Spoke-Api-Version: Directory/2021-06-01\n- Spoke-Api-Version: Directory","properties":{"apiName":{"$ref":"#/components/schemas/Api.Name"},"version":{"enum":["","2021-06-01","2024-06-01"],"type":"string"}},"required":["apiName","version"],"type":"object"},"AssignableContact":{"additionalProperties":false,"properties":{"contact":{"$ref":"#/components/schemas/Contact"},"isAssignedContact":{"type":"boolean"}},"required":["contact","isAssignedContact"],"type":"object"},"AssignedCallGroup":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"extension":{"description":"The extension of the entry in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory","type":"string"},"overriddenDisplayName":{"description":"The overridden display name of the team in the Spoke directory.\n\nRefer to Team Call Data Action for how to override the display name of a `team`.","type":"string"},"type":{"const":"team","description":"The type of the entry in the Spoke directory.\nThis value will be always be `team` for an assigned team call.","type":"string"}},"required":["id","type"],"type":"object"},"AssignedCallUser":{"additionalProperties":false,"description":"The user assigned to the call. This is a calculated value and is determined as the last user\non the call","properties":{"email":{"description":"User's email address (as registered in Spoke)","nullable":true,"type":"string"},"firstName":{"description":"User's first name","nullable":true,"type":"string"},"jobTitle":{"description":"User's job title (as registered in Spoke)","nullable":true,"type":"string"},"lastName":{"description":"User's last name","nullable":true,"type":"string"},"location":{"description":"User’s location (as registered in Spoke)","nullable":true,"type":"string"},"manager":{"anyOf":[{"$ref":"#/components/schemas/ManagerUserDirectoryEntry"},{"nullable":true}]},"mobile":{"description":"User's mobile number (as registered in Spoke)\n\nThis will be omitted if the organisation is configured to exclude mobile numbers from API responses","nullable":true,"type":"string"},"userId":{"description":"The id of the user","type":"string"}},"required":["userId"],"type":"object"},"AssignedContact":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookManagedBy":{"description":"Specifies whether the phonebook is managed by the phonebook owner or by the organisation via the Spoke API.\n\nPossible values:\n* `organisation`: Contacts in the phonebook can only be managed by the organisation administrators via the Spoke API. For a personal phonebook, the owner of\nthe phonebook will have read access to contacts but cannot update or delete any contacts.\n* `user`: For phonebooks owned by a user only. Contacts in the phonebook can only be managed by the owner of the phonebook. Contacts will not be accessible\nvia the Spoke API for Read, Update or Delete operations.\n\nWhen accessed via the Spoke API, this value will always be `organisation`.","enum":["organisation","user"],"type":"string"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"}},"type":"object"},"AuthIdentity":{"additionalProperties":false,"properties":{"integrationId":{"type":"string"},"memberId":{"type":"string"},"organisationId":{"type":"string"},"role":{"type":"string"},"scope":{"items":{"type":"string"},"type":"array"},"subjectType":{"$ref":"#/components/schemas/SubjectTypeEnum"},"userId":{"type":"string"}},"required":["organisationId","scope","subjectType"],"type":"object"},"AutoResponseContent":{"additionalProperties":false,"description":"Returning this parameter will create an auto response message that will be added to the conversation. All participants will see the response content.","properties":{"author":{"description":"The author of the auto response message. This will show as the participant name in the conversation.","type":"string"},"body":{"description":"The content of the auto response message. Can be up to 1,600 characters long.","type":"string"}},"required":["author","body"],"type":"object"},"Availability":{"additionalProperties":false,"description":"The user's current availability to take calls.","properties":{"availabilitySummary":{"description":"Describes the current availability of the user.\n\nThis field is automatically generated based on the user's current status.","type":"string"},"callId":{"description":"If `notAvailableRule` is `busyOnACall` then this field contains the Spoke callId of the active call","type":"string"},"endAt":{"description":"Date/Time (UTC - ISO8601 format) that the currently active notAvailableRule expires.  This value will be\nnull if the `status` is `available` or the `notAvailableRule` is `busyOnACall`.","nullable":true,"type":"string"},"endTimestamp":{"description":"Unix timestamp that the currently active notAvailableRule expires.  This value will be\nnull if the `status` is `available` or the `notAvailableRule` is `busyOnACall`.","nullable":true,"type":"number"},"notAvailableReason":{"description":"A text field describing the reason for the user being `busy` or `offline`. The content of this\nfield is intended for display purposes and is derived from the `notAvailableRule`, `endTimestamp`\nand `timezone` fields.\n\nThis field will contain values such as `On another call` or `Offline until 12:32pm AEDT`.\n\nThis field will be `null` if `status` is `available`","nullable":true,"type":"string"},"notAvailableRule":{"anyOf":[{"enum":["busyOnACall","busyRestOfTheDay","busyUntil","offlineHours","offlineVacation","offlineWeekends"],"type":"string"},{"nullable":true}],"description":"If the `status` is not available, this field contains the currently active rule.  If this field contains a value the\nuser will not be offered any calls if they are a member of any team.\n\nThis field will contain one of the following values:\n - ***busyOnACall***: Currently on another call. The `callId` field will contain the id of the active call.\n - ***busyRestOfTheDay***: The user has selected themselves busy for the rest of the day.\n - ***busyUntil***: The user has selected themselves busy until a certain time.\n - ***offlineHours***: The user has selected offline hours in the Spoke application, and this rule is active.\n - ***offlineWeekends***: The user has selected that they are offline during weekends, and this rule is active.\n - ***offlineVacation***: The user has selected that they are currently on vacation.\n\nThis field will be `null` if `status` is `available`"},"status":{"$ref":"#/components/schemas/AvailabilityStatus"},"statusAt":{"description":"Date/Time (UTC - ISO8601 format) that the user's status was last updated.","type":"string"},"statusTimestamp":{"description":"Unix timestamp that the user's status was last updated.","type":"number"},"timezone":{"description":"The timezone of the user. This field is automatically populated from the timezone of the user's mobile device.\n\nThe value will be one of the timezone Area/Location `name` values (e.g. America/New_York) from the public tz database.","type":"string"},"vendor":{"const":"twilio","description":"If `notAvailableRule` is `busyOnACall` then this field contains the CPaaS vendor that carried the call.\nOne of the following values:\n\n* `twilio`","type":"string"},"vendorCallId":{"description":"If `notAvailableRule` is `busyOnACall` then this field contains the vendor's identifier for the call.\nThe value of this field is dependent on the value of the `vendor` field:\n\n* `twilio`: the `CallSid` of the parent call","type":"string"}},"required":["status","statusAt","statusTimestamp","timezone"],"type":"object"},"AvailabilityRuleName":{"enum":["busyOnACall","busyRestOfTheDay","busyUntil","offlineHours","offlineVacation","offlineWeekends"],"type":"string"},"AvailabilityStatus":{"description":"The current availability status.\n\nThis field will contain one of the following values:\n\n- ***available***: available for taking a call\n- ***busy***: active but not available to take a call.\n- ***offline***: not active and not available to take a call.","enum":["available","busy","offline"],"type":"string"},"AvailabilityStatus_1":{"enum":["available","busy","offline"],"type":"string"},"BackgroundNotificationMessage":{"additionalProperties":false,"properties":{"isAlert":{"const":false,"type":"boolean"}},"required":["isAlert"],"type":"object"},"Base64ZlibCompressedData":{"additionalProperties":false,"properties":{"data":{"type":"string"},"encoding":{"const":"base64","type":"string"},"method":{"const":"zlib","type":"string"}},"required":["data","encoding","method"],"type":"object"},"BaseContact":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"}},"type":"object"},"BaseContactInsightRequestParameters":{"additionalProperties":false,"properties":{"requestOrigin":{"const":"spoke.contactlookup","description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.contactlookup`: Denotes Contact Insights being requested from the Spoke Phone app","type":"string"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"}},"required":["requestOrigin","userEmail"],"type":"object"},"BaseContentAnalysisParticipant":{"additionalProperties":false,"description":"The common properties for a participant in the content being analyzed.","properties":{"displayName":{"description":"The display name of the participant.","type":"string"},"id":{"description":"The ID of the participant in the vendor system.","type":"string"}},"required":["displayName","id"],"type":"object"},"BaseContentAnalysisRequest":{"additionalProperties":false,"description":"The common properties for a content analysis request.","properties":{"analyzer":{"$ref":"#/components/schemas/ContentAnalysisRequestAnalyzer"},"passthroughParameters":{"description":"Passthrough parameters to include with the content analysis results. Use passthrough parameters to initiate and trace the analysis from other systems.\n\nPassthrough parameters can only be specified when the content analysis is created.","type":"object"}},"type":"object"},"BaseContentAnalysisSource":{"additionalProperties":false,"description":"The common properties for the source or origin of the content being analyzed.","properties":{"data":{"additionalProperties":true,"description":"The source data from the vendor system. The structure of this data may vary based on the source type and vendor","properties":{},"type":"object"},"id":{"description":"The ID of the source in the vendor system.","type":"string"},"product":{"description":"The product name provided by the vendor that the source originates from, e.g. Connect (Spoke), Flex (Twilio) etc","type":"string"},"type":{"$ref":"#/components/schemas/ContentAnalysisSourceType"},"url":{"description":"The URL to the source in the vendor system","type":"string"},"vendor":{"description":"The name of the system that provides the source, e.g. Spoke, Twilio, Zoom etc.","type":"string"}},"required":["data","id","product","type","vendor"],"type":"object"},"BaseConversation":{"additionalProperties":false,"properties":{"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation. If this flag is true\nthen there was no external party on the conversation, and the contactNumber and companyNumber fields will\nbe empty.\n\nThis field is provided to simplify integration with CRM platforms. As there is no 'customer' or external\nparty involved in the conversation these conversation can be excluded from CRM conversation logs.","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.","items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"BaseCreateTeamMessageBody":{"additionalProperties":false,"properties":{"assignUsers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"nullable":true}],"description":"Required if routingAction is `assign_users`.  A list of user email addresses to assign to the conversation.\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.\nAssignment behaviour depends on the value of routingAction:\n\n* `assign_users`: Only assign the users defined in the request payload\n\n* `assign_team`: Assign the users defined in the request payload in addition to the team’s users."},"claimRule":{"anyOf":[{"enum":["claimable","not_claimable","required_before_reply"],"type":"string"},{"nullable":true}],"description":"If provided, sets the claim rule for a newly created conversation. The value is ignored if the conversation already exists."},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","nullable":true,"type":"string"},"companyAddress":{"description":"The company number to use as the sender Id.  Must be in +E164 format.","type":"string"},"conversationName":{"description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long.","nullable":true,"type":"string"},"messageContent":{"$ref":"#/components/schemas/CreateMessageContent"},"notifyUsers":{"description":"Controls whether notifications for this message are sent to users.\n\nWhen a conversation already exists between the company address and the contact address(es),\nsetting `notifyUsers` to `false` will still notify the existing participants.","nullable":true,"type":"boolean"},"passthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"routingAction":{"anyOf":[{"enum":["assign_team","assign_users","do_not_route"],"type":"string"},{"nullable":true}],"description":"Defines whether to assign users to the conversation that is created as a result of the message."}},"required":["companyAddress","messageContent"],"type":"object"},"BaseDirectoryEntry":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of this directory entry.","type":"string"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"$ref":"#/components/schemas/DirectoryEntryTypeEnum"}},"required":["displayName","type"],"type":"object"},"BaseExternalConversation":{"additionalProperties":false,"properties":{"assignedContact":{"anyOf":[{"$ref":"#/components/schemas/AssignedContact"},{"nullable":true}],"description":"The phonebook contact (if any) associated with the external party on the conversation."},"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.","type":"string"},"companyNumberOwner":{"anyOf":[{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},{"nullable":true}],"description":"The entry in the Spoke directory that the `companyNumber` is assigned to. This field is populated\nwhen the conversation is created and is not updated if the conversation is re-assigned to a different\ndirectory entry.\n\nThis field identifies the Spoke team or user that the `companyNumber` is assigned to. It will be\nnull for conversations involving company numbers that are not assigned to a user or team."},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"const":false,"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `false` for conversations with an external party (i.e. SMS, Group MMS or WhatsApp conversations).","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.","items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["companyNumber","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"BaseInboundConversationsDataActionRequestPayload":{"additionalProperties":false,"properties":{"conversationId":{"description":"The Spoke ID of the conversation","type":"string"},"messageContent":{"$ref":"#/components/schemas/MessageContent"},"vendorConversationId":{"description":"The vendor's identifier for the conversation","type":"string"}},"required":["conversationId","messageContent","vendorConversationId"],"type":"object"},"BaseInsightRequestParameters":{"additionalProperties":false,"properties":{"requestOrigin":{"$ref":"#/components/schemas/InsightDataActionRequestOriginEnum"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"}},"required":["requestOrigin","userEmail"],"type":"object"},"BaseParticipantEvent":{"additionalProperties":false,"properties":{"eventType":{"$ref":"#/components/schemas/ParticipantEventType"},"participant":{"$ref":"#/components/schemas/Participant"},"timestamp":{"description":"Unix timestamp that this participant event occurred.","type":"number"}},"required":["eventType","participant","timestamp"],"type":"object"},"BlockedCallReason":{"const":"dataAction","type":"string"},"Boolean":{"additionalProperties":false,"type":"object"},"BroadcastNotificationToOrganisationPayload":{"additionalProperties":false,"properties":{"broadcastToOrganisation":{"const":true,"type":"boolean"},"channels":{"items":{"const":"websocket","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"message":{"$ref":"#/components/schemas/BackgroundNotificationMessage"}},"required":["broadcastToOrganisation","channels","message"],"type":"object"},"CPaaSVendor":{"const":"twilio","description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"CallDirection":{"description":"Call direction. One of the following values:\n- inbound: An incoming call to Spoke Phone from an external caller\n- outbound: An outgoing call from Spoke Phone to another caller","enum":["inbound","outbound"],"type":"string"},"CallDirectoryEntry":{"additionalProperties":false,"description":"For `inbound` calls, contains the directory entry the call was originally routed to/intended for.\nFor `outbound` calls, this field will be empty.\n\nIn the case of calls to teams where roll-over rules have applied, this field will contain\nthe first \"offered\" team only.","properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"extension":{"description":"The extension of the entry in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory","type":"string"},"overriddenDisplayName":{"description":"The overridden display name of the entry in the Spoke directory.\n\nRefer to Team Call Data Action for how to override the display name of a `team`.\nOverriding display name for `user`, `device`, `trunkUser`, `trunkDevice` and `trunkQueue` is not currently possible.","type":"string"},"type":{"description":"The type of the entry in the Spoke directory. One of `user`, `team`, `device`, `trunkUser`, `trunkDevice`, `trunkQueue`","type":"string"}},"required":["id","type"],"type":"object"},"CallEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"}},"required":["call"],"type":"object"},"CallEventDataType":{"anyOf":[{"$ref":"#/components/schemas/CallEventData"},{"$ref":"#/components/schemas/CallHighlightEventData"},{"$ref":"#/components/schemas/CallNoteEventData"},{"$ref":"#/components/schemas/CallRecordingEventData"},{"$ref":"#/components/schemas/CallVoicemailEventData"},{"$ref":"#/components/schemas/CallFormEventData"},{"$ref":"#/components/schemas/CallTranscriptEventData"}]},"CallFormEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"form":{"$ref":"#/components/schemas/Form"}},"required":["call","form"],"type":"object"},"CallGroupDataActionRequestPayload":{"additionalProperties":false,"properties":{"assignedCallGroup":{"$ref":"#/components/schemas/CallGroupDirectoryEntry"},"callId":{"description":"The Spoke ID of the call.","type":"string"},"companyNumber":{"description":"The company number that originated or terminated this call. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThis field will be null for Spoke internal calls (where `isInternal` is true).","type":"string"},"contactId":{"description":"The ID of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"contactNumber":{"description":"The phone number of the external party that originated or terminated this call.\n\nPossible values:\n\n- null: This field will be blank for Spoke internal calls (where `isInternal` is true).\n- ANONYMOUS: If the external party has masked their caller id then this field will contain the value `ANONYMOUS`\n- +E164 Number: A phone number in +E164 format (e.g. +16508221060)","type":"string"},"directoryTarget":{"$ref":"#/components/schemas/DeprecatedDirectoryTarget"},"isInternal":{"description":"Indicates whether the call was an internal (Spoke User to Spoke Team) call. If this flag is true\nthen there was no external party on the call, and the contactNumber and companyNumber fields will\nbe empty.","type":"boolean"},"offerConfig":{"$ref":"#/components/schemas/CurrentCallGroupOfferConfig"},"passthroughParameters":{"additionalProperties":true,"description":"The existing passthrough parameters stored against the call record.\n\nIf there are no existing passthrough parameters, this field will be an empty object.","properties":{},"type":"object"},"vendorCallId":{"description":"The vendor's identifier for the call.","type":"string"}},"required":["assignedCallGroup","callId","directoryTarget","isInternal","offerConfig","passthroughParameters","vendorCallId"],"type":"object"},"CallGroupDataActionResponsePayload":{"additionalProperties":false,"properties":{"callGroupDisplayName":{"description":"This overrides the current display name of the team the call will be offered to.\n\n***Note***: This field is ignored for internal calls.\n\nOverriding the display name will change what is displayed in the following areas:\n* Incoming call screen for new calls, transferred calls, and rolled over calls to a team\n* Incoming call and missed call notifications\n* Current call screen\n* Users' call history and call details on Spoke applications\n* Account-wide call history and call summary on Spoke account portal\n* Call summary and voicemail summary emails","type":"string"},"offerConfig":{"$ref":"#/components/schemas/OverrideCallGroupOfferConfig"},"passthroughParameters":{"$ref":"#/components/schemas/CallPassthroughParametersResponse"},"priority":{"description":"If specified, overrides the priority of the call. Use this to prioritise or deprioritise a call.\n\nPriority is used:\n\n* To determine which calls take priority when selecting the next call to queue for a user.\n* To determine the order in which calls are offered to a user.\n\nThe supported range of values for `priority` is an integer value between 1 and 9, where 1 is the highest priority and 9 is the lowest.\nAny calls with an undefined or invalid priority are assigned a default value of 5.","type":"number"}},"type":"object"},"CallGroupDirectoryEntry":{"additionalProperties":false,"description":"Contains directory entry of the team which the call was offered to.","properties":{"displayName":{"description":"The display name of the entry in the Spoke directory. This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"extension":{"description":"The extension of the entry in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory.","type":"string"},"type":{"const":"team","description":"The type of the entry in the Spoke directory.\nThis value will be `team` for the calls to the team.","type":"string"}},"required":["id","type"],"type":"object"},"CallHighlightEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"highlight":{"$ref":"#/components/schemas/Highlight"}},"required":["call","highlight"],"type":"object"},"CallInsightRequestParameters":{"additionalProperties":false,"properties":{"callId":{"description":"The Spoke identifier for the call.\n\nThis field will be null for an Insights data action from the Speedy app.","nullable":true,"type":"string"},"companyNumber":{"description":"The company number that originated or terminated this call. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThis field will be null for Spoke internal calls (calls between Spoke users and/or devices).","nullable":true,"type":"string"},"contactEmail":{"description":"The email address of the contact being called or the contact who originated the call\n\nFor calls to/from phonebook contacts, this field will contain the first email stored in the phonebook for the contact:\n- who originated the call for `inbound` calls\n- who is being called for `outbound` calls\n\nFor Spoke internal calls to a user, this field will contain the email of the Spoke user being called.\n\nThis field will be null for calls to/from phone numbers that do not match any phonebook contacts, or if\nthe phonebook contact has no email.","nullable":true,"type":"string"},"contactId":{"description":"The identifier of the contact being called or the contact who originated the call.\n\nFor calls to/from phonebook contacts, this field will contain the identifier of the contact:\n- who originated the call for `inbound` calls\n- who is being called for `outbound` calls\n\nFor Spoke internal calls to a user, this field will contain the identifier of the Spoke user being called.\n\nThis field will be null for calls to/from phone numbers that do not match any phonebook contacts.","nullable":true,"type":"string"},"contactNumber":{"description":"The phone number of the external party that originated or terminated this call.\n\nPossible values:\n\n- null: This field will be blank for Spoke internal calls (calls between Spoke users and/or devices).\n- ANONYMOUS: If the external party has masked their caller id then this field will contain the value `ANONYMOUS`\n- +E164 Number: A phone number in +E164 format (e.g. +16508221060)","nullable":true,"type":"string"},"contactSource":{"description":"The name of the phonebook that the contact being called or the contact who originated the call\nbelongs to (e.g. `Zoho` or `My CSV-Upload Phonebook`).\n\nThe contactSource field will match the phonebook name as listed in the\n[Spoke Account Portal integrations page](https://account.spokephone.com/integrations).\n\nThis field will be null when `isInternal` is true.","nullable":true,"type":"string"},"direction":{"$ref":"#/components/schemas/CallDirection"},"isInternal":{"description":"Indicates whether the call is an internal (Spoke User to Spoke User) call. If this flag is true\nthen there is no external party on the call, and the `contactNumber`, `companyNumber` and `contactSource` fields\nwill be empty.","type":"boolean"},"requestOrigin":{"description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.precall`: Denotes Call Insights being requested from the Spoke Phone app's incoming call screen\n- `spoke.call`: Denotes Call Insights being requested from the Spoke Phone app active call insights screen\n- `spoke.callhistory`: Denotes Call Insights being requested from the Spoke Phone app's call history\n- `speedy.call`: Denotes Call Insights being requested from the Speedy app","enum":["speedy.call","spoke.call","spoke.callhistory","spoke.precall"],"type":"string"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"},"vendorCallId":{"description":"The vendor's identifier for the call.","type":"string"}},"required":["direction","isInternal","requestOrigin","userEmail","vendorCallId"],"type":"object"},"CallNoteEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"note":{"$ref":"#/components/schemas/Note"}},"required":["call","note"],"type":"object"},"CallOutcome":{"additionalProperties":false,"description":"The final outcome of the call. Populated for all calls, once the call has ended.\n\nFor `inbound` calls that are unanswered (i.e. `missed` or `abandoned`) this field contains\nfurther details about the reason for the outcome.\n\nFor `outbound` calls that are blocked this field contains\nfurther details about the reason for the outcome.","properties":{"reason":{"anyOf":[{"enum":["dataAction","earlyOfferAbandon","ivrAbandon","noOneAvailable","noOnePickedUp","outsideBusinessHours"],"type":"string"},{"nullable":true}],"description":"The outcome reason of the call.\n\nPopulated for `inbound` calls with outcome status of `missed` or `abandoned`.\n\nFor `missed` calls, one of:\n\n* `noOneAvailable`: Spoke was unable to offer the call to any users\n* `noOnePickedUp`: The call was offered to one or more users but no one picked up\n* `outsideBusinessHours`: The call was received outside business hours\n\nFor `abandoned` calls, one of:\n\n* `earlyOfferAbandon`: The caller disconnected within 5 seconds of the call being offered to a user\n* `ivrAbandon`: The caller disconnected before the call was offered to any users\n\nPopulated for `outbound` calls with outcome status of `blocked`.\n\nFor `blocked` calls, one of:\n\n* `dataAction`: The configured Outbound Call Data Action endpoint returned a \"blocked\" dial permission for the call\n\nThis field will be null for `answered` calls."},"status":{"$ref":"#/components/schemas/CallOutcomeStatus"}},"required":["status"],"type":"object"},"CallOutcomeStatus":{"description":"The outcome status of the call. One of:\n* `answered`\n* `missed`\n* `abandoned`\n* `blocked`","enum":["abandoned","answered","blocked","missed"],"type":"string"},"CallParty":{"additionalProperties":false,"properties":{"connections":{"description":"A list of connections on this call for this party. May be empty if the party did not answer any dial attempts.","items":{"$ref":"#/components/schemas/CallPartyConnection"},"type":"array"},"dials":{"description":"A list of dial attempts to the call party during this call. This list includes unanswered dials resulting from\nteam call offers, DDI calls, transfers, forwards and conference group adds.","items":{"$ref":"#/components/schemas/CallPartyDial"},"type":"array"},"displayValue":{"description":"Possible values:\n\n* `user` and `device` types: the display name of the party in the Spoke Directory.\n* `phone` types: If there is a matching phonebook contact, this field will contain the display name field\n  from the contact, otherwise this field will contain the party's phone number in international format (e.g. `+1 650-822-1060`)","type":"string"},"email":{"description":"For a party of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"extension":{"description":"The extension of the entry in the Spoke directory. Only populated when `isInternal` = `true`","type":"string"},"id":{"description":"The id of the call party. Possible values:\n\n* `user` and `device` types: the id of the party in the Spoke Directory.\n* `phone` types: The party's phone number in +E164 format (e.g. +16508221060)","type":"string"},"isInternal":{"description":"Whether this party is internal to the system. `true` for `user` and `device` types, `false` otherwise.","type":"boolean"},"timezone":{"description":"For a party of type `user` contains the timezone of the user. A user's timezone is detected automatically\nin the Spoke Client and is updated on changes in availability.\n\nTimezone is represented as an IANA timezone database name (e.g. `America/Los_Angeles`).","type":"string"},"type":{"$ref":"#/components/schemas/CallPartyType"}},"required":["connections","dials","displayValue","id","isInternal","type"],"type":"object"},"CallPartyConnection":{"additionalProperties":false,"properties":{"durationSec":{"description":"The duration in seconds of the connection.","type":"number"},"joinedAt":{"description":"Date/Time (UTC - ISO8601 format) that this connection joined the call","type":"string"},"joinedTimestamp":{"description":"Join time (unix timestamp) for this connection.","type":"number"},"leftAt":{"description":"Date/Time (UTC - ISO8601 format) that this connection left the call","type":"string"},"leftTimestamp":{"description":"Leave time (unix timestamp) for this connection.","type":"number"},"vendorCallId":{"description":"The vendor's identifier for the call.","type":"string"}},"required":["durationSec","joinedAt","joinedTimestamp","leftAt","leftTimestamp","vendorCallId"],"type":"object"},"CallPartyConnectionDirection":{"description":"The direction of this call party connection.","enum":["inbound","outbound"],"type":"string"},"CallPartyDial":{"additionalProperties":false,"properties":{"dialAt":{"description":"Date/Time (UTC - ISO8601 format) for this dial","type":"string"},"dialTimestamp":{"description":"Time (unix timestamp) for this dial","type":"number"},"reason":{"$ref":"#/components/schemas/CallPartyDialReason"},"vendorCallIds":{"description":"A list of the vendor's call identifiers for this dial attempt. Each entry in the list represents a dial attempt to one of the user's associated devices.","items":{"type":"string"},"type":"array"}},"required":["dialAt","dialTimestamp","reason"],"type":"object"},"CallPartyDialReason":{"description":"The reason the party was dialed. One of:\n* `callGroup`: The party was offered the call as part of a team call offer\n* `directDial`: The party was dialed directly either via their direct number, or via their extension\n* `transfer`: A call was transferred to the party\n* `conference`: The party was added to the call via the \"Add to call\" mechanism in Spoke\n* `forward`: The call was forwarded to the party due to team call roll over rules.","enum":["callGroup","conference","directDial","forward","transfer"],"type":"string"},"CallPartyType":{"description":"The type of the call party. One of:\n* `user`: A user on the Spoke platform\n* `device`: A device on the Spoke platform such as a SIP device\n* `phone`: A PSTN connected phone","enum":["device","phone","user"],"type":"string"},"CallPassthroughParametersResponse":{"additionalProperties":false,"description":"If specified, updates the passthrough parameters stored against the call by merging the existing passthrough parameters with the returned passthrough\nparameters. If a key exists in both the existing passthrough parameters and the returned passthrough parameters, the returned parameter value will overwrite\nthe existing value.\n\nEach passthrough parameter key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be ignored.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.\n\nExample:\n```json\n{\n  \"x-contactId\": \"HS12345\",\n  \"x-orderId\": \"ORD12345\"\n}\n```","type":"object"},"CallRecordingAutoExpiryRule":{"enum":["never","oneDay","oneMonth","oneYear","sevenDays","threeMonths"],"type":"string"},"CallRecordingBatchUpdateAutoExpiryEventData":{"additionalProperties":false,"properties":{"autoExpiryRule":{"$ref":"#/components/schemas/CallRecordingAutoExpiryRule"}},"required":["autoExpiryRule"],"type":"object"},"CallRecordingDeleteEventData":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"recordingId":{"type":"string"},"requestedByUserId":{"type":"string"},"s3Bucket":{"type":"string"},"s3Key":{"type":"string"},"source":{"$ref":"#/components/schemas/CallRecordingDeletedEventSource"}},"required":["callId","recordingId","s3Bucket","s3Key","source"],"type":"object"},"CallRecordingDeletedEventSource":{"enum":["api","ttlExpired","user"],"type":"string"},"CallRecordingEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"recording":{"$ref":"#/components/schemas/Recording"}},"required":["call","recording"],"type":"object"},"CallRecordingTranscript":{"additionalProperties":false,"description":"The transcript of the call recording","properties":{"createdAt":{"description":"UTC timestamp of the transcript creation","type":"number"},"id":{"description":"ID of the transcript","type":"string"},"source":{"$ref":"#/components/schemas/TranscriptSource"},"speakers":{"description":"The list of speakers in the transcript","items":{"$ref":"#/components/schemas/TranscriptSpeaker"},"type":"array"},"text":{"description":"The full text of the transcript\n\nIf the audio source is a call recording:\n  * The transcript may include `JOIN` and `LEAVE` events if any speakers join or leave the call while it's being recorded.\n  * The timestamp on each line is offset from the start of the first call recording if the call has multiple recordings\n\nExample:\n\n`\"[JOIN: Alice Johnson (0:01)]\\n\\n[Alice Johnson (0:02)]: Hello Bob, how can I assist you today?\\n\\n[Bob Smith (0:05)]: Hi Alice, I cannot login into my\naccount.\\n\\n[Alice Johnson (0:08)]: Okay, let me transfer to you to one of our account managers. Just a moment.\\n\\n[LEAVE: Alice Johnson (0:10)]\\n\\n[JOIN:\nDavid Young (0:20)]\\n\\n[David Young (0:22)]: Hi Bob, I understand you're having trouble logging into your account.\"`","type":"string"}},"required":["createdAt","id","source","speakers","text"],"type":"object"},"CallRecordingTranscriptionCheckCompletedEventDetail":{"additionalProperties":false,"properties":{"callEnded":{"type":"boolean"},"callId":{"type":"string"},"organisationId":{"type":"string"}},"required":["callEnded","callId","organisationId"],"type":"object"},"CallRecordingTranscriptionRequestedEventDetail":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"organisationId":{"type":"string"},"recordingId":{"type":"string"},"transcriptId":{"type":"string"}},"required":["callId","organisationId","recordingId","transcriptId"],"type":"object"},"CallRecordingTranscriptionSkippedEventDetail":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"organisationId":{"type":"string"},"recordingId":{"type":"string"}},"required":["callId","organisationId","recordingId"],"type":"object"},"CallRequest":{"additionalProperties":false,"properties":{"before":{"description":"Get all matching records created before (UNIX timestamp)","type":"string"},"contactNumber":{"description":"Only return calls where the `contactNumber` field matches the parameter value. The parameter value must be provided in +E164 format.\n\nUse this parameter to find calls for a given external party such as a customer.","type":"string"},"id":{"description":"if Provided, the ID of the call to get","type":"string"},"includeActive":{"description":"Set to true to get all calls including active calls, otherwise only ended calls are returned. Default to false.","type":"string"},"includeRecordingUrl":{"description":"Set to true to get recording URLs in `Voicemail`, `Recording` and `Highlight`. Default to true.","type":"string"},"limit":{"description":"Number of objects fetched per request","type":"string"},"modified":{"description":"Get all records modified since (UNIX timestamp)","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"},"since":{"description":"Get all matching created since (UNIX timestamp)","type":"string"},"sortOrder":{"description":"The order of results returned when listing calls.\n\nOne of the following values:\n\n - ***ascending***: Sort results in ascending order (oldest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the\n   `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n - ***descending***: Sort results in descending order (latest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the\n   `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n\nBy default, the results will be sorted in `ascending` order using the `lastModifiedTimestamp` field.","enum":["ascending","descending"],"type":"string"}},"type":"object"},"CallSortOrder":{"description":"The order of results returned when listing calls.\n\nOne of the following values:\n\n - ***ascending***: Sort results in ascending order (oldest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the\n   `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n - ***descending***: Sort results in descending order (latest first). By default, the results will be sorted using the `lastModifiedTimestamp` field. If the\n   `since` or `before` parameter is specified, the results will be sorted using the `startedTimestamp` field.\n\nBy default, the results will be sorted in `ascending` order using the `lastModifiedTimestamp` field.","enum":["ascending","descending"],"type":"string"},"CallSummary":{"additionalProperties":false,"description":"Human readable call summary suitable for inserting into call note fields in CRM platforms.\n\nCurrently these are provided in English language only.","properties":{"companyNumberDescription":{"description":"One line text description of the company phone number that was used for this call:\n\n- Inbound: If the call direction is inbound then this will be the number that the external party called (company number, team or personal DDI)\n- Outbound: If the call direction is outbound then this will be the caller id that was user.\n\nExamples of this field are:\n\n- Called in to +64 9 888 0680\n- Called out from +64 9 888 0680","type":"string"},"contactNumberDescription":{"description":"One line text description of the external call party:\n\n- Inbound:  If call direction is inbound then this will be the caller ID of the external party.\n- Outbound: If the call direction is outbound then this will be the number that was called.\n\nExamples of this field are:\n\n- Inbound: Called in from +64 21 888 111\n- Outbound: Called out to +64 21 888 111\n\nPhone number will be in an international +E164 (display) format.  If the external party has masked\ntheir caller id then the phone number value will be \"ANONYMOUS\" or other similar undialable value.","type":"string"},"header":{"description":"One line description of call, for example:\n\n- Inbound call {to (Engineering|Joseph Brealey)} from Isabella Rose-Torres\n- Outbound call from Joseph Brealey to John Smith","type":"string"},"outcome":{"description":"The outcome of the call. This is a short summary of what happened to the call\nand depends on a number of factors:\n\n- Whether the call was answered\n- If the call was transferred to any other Spoke users\n\nExamples of this field:\n\n- Answered by Joseph Brealey, transferred to Joanna Brown.\n- Unanswered call","type":"string"}},"required":["header"],"type":"object"},"CallTranscriptEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"transcript":{"$ref":"#/components/schemas/Transcript"}},"required":["call","transcript"],"type":"object"},"CallTranscriptionCompletedEventDetail":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"organisationId":{"type":"string"}},"required":["callId","organisationId"],"type":"object"},"CallTransport":{"description":"The mechanism used for delivering the call, one of:\n* `voip`: This connected call party was delivered on the Spoke Client or via SIP\n* `carrier`: This connected call party connection was delivered on the PSTN","enum":["carrier","voip"],"type":"string"},"CallVoicemailEventData":{"additionalProperties":false,"properties":{"call":{"$ref":"#/components/schemas/Call"},"voicemail":{"$ref":"#/components/schemas/Voicemail"}},"required":["call","voicemail"],"type":"object"},"CallWithoutContact":{"additionalProperties":false,"properties":{"answeredAt":{"description":"Date/Time (UTC - ISO8601 format) that this call started","type":"string"},"assignedCallGroup":{"anyOf":[{"$ref":"#/components/schemas/AssignedCallGroup"},{"nullable":true}],"description":"The team assigned to the call. This is a calculated value and is determined as the last team\nthat is offered the call.\n\nThis field will be null for calls that are sent directly to users or phone numbers."},"assignedUser":{"$ref":"#/components/schemas/AssignedCallUser"},"companyNumber":{"description":"The company number that originated or terminated this call.  This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThis field will be null for Spoke internal calls (where `isInternal` is true).","nullable":true,"type":"string"},"contactNumber":{"description":"The phone number of the external party that originated or terminated this call. Use this field\nfor CRM integration if there is no value in the `assignedContact` field and you wish to create\na new record for unknown customer numbers.\n\nPossible values:\n\n- null: This field will be blank for Spoke internal calls (where `isInternal` is true).\n- ANONYMOUS: If the external party has masked their caller id then this field will contain the value `ANONYMOUS`\n- +E164 Number: A phone number in +E164 format (e.g. +16508221060)","nullable":true,"type":"string"},"direction":{"$ref":"#/components/schemas/CallDirection"},"directoryTarget":{"$ref":"#/components/schemas/CallDirectoryEntry"},"duration":{"description":"Duration of the call in milliseconds.","type":"number"},"durationText":{"description":"Duration of the call in human readable form","type":"string"},"endedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call ended or the caller hung up","type":"string"},"forms":{"description":"A list of forms started or submitted for this call.\n\nA `Form` represents a form started or submitted by a Spoke user, during the call, at the end of the call,\nor at any time after the call has ended.","items":{"$ref":"#/components/schemas/Form"},"type":"array"},"highlights":{"description":"A list of highlights for this call.\n\nA `Highlight` represents a snapshot of the call, taken at a point in time by a Spoke user, with one or more optional tags selected.\n\nIt is possible to have multiple `Highlight`s in a call, and each `Highlight` may have multiple tags associated with it.","items":{"$ref":"#/components/schemas/Highlight"},"type":"array"},"id":{"description":"The id of the call","type":"string"},"initiator":{"description":"** DEPRECATED **. Use the `contactNumber` and `companyNumber` fields instead.","type":"string"},"isConference":{"description":"Indicates whether the call was a Spoke conference call.\n\nWebhook events `call.answered`, `call.not_answered`, `call.hungup` will not fire for calls where this field\nis set to `true`","type":"boolean"},"isInternal":{"description":"Indicates whether the call was an internal (Spoke User to Spoke User) call. If this flag is true\nthen there was no external party on the call, and the contactNumber and companyNumber fields will\nbe empty.\n\nThis field is provided to simplify integration with CRM platforms. As there is no 'customer' or external\nparty involved in the call these calls can be excluded from CRM call logs.\n\nWebhook events `call.answered`, `call.not_answered`, `call.hungup` will not fire for calls where this field\nis set to `true`","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call was last modified.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that this call record was last modified.","type":"number"},"notes":{"description":"A list of notes recorded against a call.\n\nA `Note` represents a note recorded by a Spoke user at the end of the call, or at any time after the call has ended\nThe note is first transcribed and then optionally edited by the user.\n\nIt is possible to store multiple `Note`s against a call, and each `Note` can have multiple `NoteContent`\nitems for each paragraph of text recorded.","items":{"$ref":"#/components/schemas/Note"},"type":"array"},"outcome":{"$ref":"#/components/schemas/CallOutcome"},"parties":{"description":"A list of the parties on this call. Each call will consist of at least one, and possibly many, call parties.\n\nA call party represents a `User`, `Device` or in the case of external parties, an E164 PSTN phone number.\n\nIt is possible for a party to leave and then rejoin a call via transfer or conference. Each instance of\nthe party joining the call is represented by a separate entry in the `connections` attribute of the\ncall party.","items":{"$ref":"#/components/schemas/CallParty"},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the call. Use passthrough parameters to initiate and trace calls from other\nsystems.\n\nPassthrough parameters can be associated with a call via the following mechanisms.\n\n* Deep linking - dialing a call via the Spoke App\n* Redirect - redirecting a call to Spoke from Twilio\n* Data Action - returning passthrough parameters in response to a call related data action request.\n\nThe parameter names and values are URL decoded, safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"recipient":{"description":"** DEPRECATED **. Use the `contactNumber` and `companyNumber` fields instead.","type":"string"},"recordings":{"description":"All recordings associated with this call.\n\nIt is possible for a call to have more than one recording if the organisation has the ad-hoc\nrecording option enabled.  This option allows users to toggle recording on and off during the\ncall. In this case there will be one recording per \"on\" period.","items":{"$ref":"#/components/schemas/Recording"},"type":"array"},"startedAt":{"description":"Date/Time (UTC - ISO8601 format) that this call started.","type":"string"},"startedTimestamp":{"description":"Unix timestamp that this call was started","type":"number"},"status":{"description":"Status of the call. One of the following values:\n\n* `started`\n* `offered`\n* `missed`\n* `accepted`\n* `ended`\n* `abandoned`\n* `blocked`","type":"string"},"summary":{"$ref":"#/components/schemas/CallSummary"},"tariff":{"$ref":"#/components/schemas/Tariff"},"user":{"$ref":"#/components/schemas/FirstCallUser"},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorCallId":{"description":"The vendor's identifier for the call. The value of this field is dependent\non the value of the `vendor` field:\n\n* `twilio`: the `CallSid` of the parent call","type":"string"},"voicemail":{"$ref":"#/components/schemas/Voicemail"},"waitTime":{"description":"The length of time in milliseconds the first caller waited prior to the call being answered by a `user` or an external party.\n\nIf the call was answered, this field is calculated as the time difference between `startedAt` and `answeredAt`,\nwhere `startedAt` is the time that the call started on the Spoke platform.\n\nFor inbound calls, if the customer has interacted with the Spoke IVR, then wait time will include the IVR interaction time.\n\nFor unanswered calls this field is equivalent to the duration of the call.","type":"number"},"waitTimeText":{"description":"Wait time of the call in human readable form","type":"string"}},"required":["direction","id","initiator","isConference","isInternal","lastModifiedAt","lastModifiedTimestamp","recipient","startedAt","startedTimestamp","status","summary"],"type":"object"},"Channel":{"description":"The type of the conversation channel.","enum":["groupMms","sms","whatsApp"],"type":"string"},"ClaimRule":{"description":"Defines whether a conversation can be claimed by a Spoke user.  Claiming allows a user to take exclusive\nownership of a conversation. Once claimed, other Spoke participants will be removed from the conversation.\n\nFor numbers assigned to a team shared inbox, if no value is provided, then the setting for the team shared inbox will apply.\n\nPossible values:\n* `claimable`: The conversation can be claimed at any time by any user assigned to the conversation\n\n* `not_claimable`: The conversation is not claimable\n\n* `required_before_reply`: A variant of `claimable`, this requires the conversation to be claimed before a reply can be sent to the external participant","enum":["claimable","not_claimable","required_before_reply"],"type":"string"},"CompressedData":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/CompressedDataType"},"encoding":{"const":"base64","type":"string"},"method":{"const":"zlib","type":"string"}},"required":["data","encoding","method"],"type":"object"},"CompressedDataEncoding":{"const":"base64","type":"string"},"CompressedDataType":{"additionalProperties":false,"type":"object"},"CompressionMethod":{"const":"zlib","type":"string"},"ConfigModifiedEventData":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"key":{"type":"string"},"ownerId":{"type":"string"},"value":{"type":"string"}},"required":["enabled","key","ownerId","value"],"type":"object"},"ConnectedPartyTariff":{"additionalProperties":false,"description":"The metered tariff of an individual connected call party.\n\nAn `answered` call on Spoke will have a minimum of two call parties, one with a direction of\n`inbound` and at least one with a direction of `outbound`. If a user leaves and rejoins a call,\nthere will be multiple `ConnectedPartyTariff` records for that party.\n\nCall parties involving the Spoke Client or SIP devices are treated as not having a geographic\nlocation and will have a transport of `voip` and a `null` country field.\n\nAs noted in the description of `tariff`, the cost of the call is metered in per-minute increments:\n\n* The `quantity` field represents the number of minutes\n* The `amount` field represents the per-minute rate used to tariff the call\n* The `total` field is calculated as `quantity*amount`","properties":{"amount":{"description":"The per-minute rate of the connected call party","type":"number"},"direction":{"$ref":"#/components/schemas/CallPartyConnectionDirection"},"durationSec":{"description":"The duration in seconds of the connected call party.","type":"number"},"initiator":{"description":"The E164 number, SIP address or Twilio client address of the initiatior.\n\nFor `outbound` call legs to the Spoke Client, this field will contain `SYSTEM`.","type":"string"},"quantity":{"description":"The number of minutes used to tariff the call party connection.","type":"number"},"recipient":{"description":"The E164 number, SIP address or Twilio client address of the recipient.\n\nFor `inbound` call legs from the Spoke Client, this field will contain `SYSTEM`","type":"string"},"recipientCountry":{"description":"The country of the recipient call party, if the transport is `carrier`.\n\nThis field is null when `transport` is `voip`","type":"string"},"routeDescription":{"description":"A description of the route used for the call.","type":"string"},"total":{"description":"The total cost of this connected call party","type":"number"},"transport":{"$ref":"#/components/schemas/CallTransport"},"vendorCallId":{"description":"The vendor's identifier for the call. The value of this field is dependent\non the value of the `vendor` field in the parent `Call` object:\n\n* `twilio`: the `CallSid` of the connected party's call","type":"string"}},"required":["amount","direction","durationSec","initiator","quantity","recipient","routeDescription","total","transport","vendorCallId"],"type":"object"},"ContactEventData":{"anyOf":[{"$ref":"#/components/schemas/ContactSharedWithAddActionEventData"},{"$ref":"#/components/schemas/ContactSharedWithUpdateActionEventData"}]},"ContactInput":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/ValueWithLabel"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"ID of the contact. Must be specified if other contacts in the same phonebook are created with a specified ID.","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/ValueWithLabel"},"type":"array"}},"required":["phoneNumbers"],"type":"object"},"ContactInsightRequestParameters":{"anyOf":[{"$ref":"#/components/schemas/ExternalContactInsightRequestParameters"},{"$ref":"#/components/schemas/InternalContactInsightRequestParameters"}]},"ContactParticipant":{"additionalProperties":false,"properties":{"address":{"description":"The address of contact participant.","type":"string"},"type":{"const":"contact","type":"string"}},"required":["address","type"],"type":"object"},"ContactSharedAction":{"enum":["add","update"],"type":"string"},"ContactSharedByUser":{"additionalProperties":false,"description":"The user who shared the contact.\n\nThis field identifies the entry for the user in the Spoke directory.","properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"The email address of the entry.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory.","type":"string"}},"required":["displayName","id"],"type":"object"},"ContactSharedWithAddActionEventData":{"additionalProperties":false,"properties":{"action":{"const":"add","description":"Indicates that a new contact has been shared, with the user specifying that they would like this contact to be added to an externally connected system.","type":"string"},"contact":{"$ref":"#/components/schemas/NewContactShared"},"context":{"$ref":"#/components/schemas/SharedContactContext"},"sharedByUser":{"$ref":"#/components/schemas/ContactSharedByUser"}},"required":["action","contact","context","sharedByUser"],"type":"object"},"ContactSharedWithUpdateActionEventData":{"additionalProperties":false,"properties":{"action":{"const":"update","description":"Indicates that an update for an existing contact has been shared, with the user specifying that they would like this contact to be updated in an externally\nconnected system.","type":"string"},"contact":{"$ref":"#/components/schemas/UpdatedContactShared"},"context":{"$ref":"#/components/schemas/SharedContactContext"},"sharedByUser":{"$ref":"#/components/schemas/ContactSharedByUser"}},"required":["action","contact","context","sharedByUser"],"type":"object"},"ContentAnalysisAgentScorecardsContent":{"additionalProperties":false,"description":"The content for an agent scorecards source. Documents must be provided.","properties":{"documents":{"description":"A list of documents provided for the analysis.\n\nDocuments can be the primary content being analysed or supporting material that provides context for the analysis.\n\nThe documents required depend on the analyzer being used.","items":{"$ref":"#/components/schemas/ContentAnalysisDocument"},"type":"array"}},"required":["documents"],"type":"object"},"ContentAnalysisAgentScorecardsParticipant":{"additionalProperties":false,"description":"A participant in an agent scorecards content analysis.","properties":{"data":{"$ref":"#/components/schemas/ContentAnalysisUserParticipantData"},"displayName":{"description":"The display name of the participant.","type":"string"},"id":{"description":"The ID of the participant in the vendor system.","type":"string"},"type":{"const":"user","type":"string"}},"required":["data","displayName","id","type"],"type":"object"},"ContentAnalysisAgentScorecardsRequest":{"additionalProperties":false,"description":"The payload for analyzing content from aggregated agent scorecards.","properties":{"analyzer":{"$ref":"#/components/schemas/ContentAnalysisRequestAnalyzer"},"content":{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsContent"},"participants":{"description":"The list of participants relevant to the scorecards being analyzed","items":{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsParticipant"},"type":"array"},"passthroughParameters":{"description":"Passthrough parameters to include with the content analysis results. Use passthrough parameters to initiate and trace the analysis from other systems.\n\nPassthrough parameters can only be specified when the content analysis is created.","type":"object"},"source":{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsSource"}},"required":["content","participants","source"],"type":"object"},"ContentAnalysisAgentScorecardsSource":{"additionalProperties":false,"description":"The source when the content being analyzed originates from aggregated agent scorecards.","properties":{"data":{"$ref":"#/components/schemas/AgentScorecardsSourceData"},"endedTimestamp":{"description":"Unix timestamp in milliseconds when the source ended","type":"number"},"id":{"description":"The ID of the source in the vendor system.","type":"string"},"product":{"description":"The product name provided by the vendor that the source originates from, e.g. Connect (Spoke), Flex (Twilio) etc","type":"string"},"startedTimestamp":{"description":"Unix timestamp in milliseconds when the source started","type":"number"},"type":{"const":"agentScorecards","type":"string"},"url":{"description":"The URL to the source in the vendor system","type":"string"},"vendor":{"description":"The name of the system that provides the source, e.g. Spoke, Twilio, Zoom etc.","type":"string"}},"required":["data","endedTimestamp","id","product","startedTimestamp","type","vendor"],"type":"object"},"ContentAnalysisAnalyzer":{"additionalProperties":false,"description":"The analyzer used when analyzing the content. Only populated when the analysis has started.","properties":{"name":{"description":"The name of the analyzer","type":"string"},"version":{"description":"The version of the analyzer","type":"string"}},"required":["name","version"],"type":"object"},"ContentAnalysisCallContent":{"additionalProperties":false,"description":"The content for a call source. Either recordings or transcripts must be provided.","properties":{"recordings":{"description":"A list of audio recordings. They will be transcribed and then analyzed based on the created transcript.\n\nThe corresponding transcripts will be available in the result when the request is completed.","items":{"$ref":"#/components/schemas/ContentAnalysisRecording"},"type":"array"},"transcripts":{"description":"A list of transcripts to be analyzed.","items":{"$ref":"#/components/schemas/ContentAnalysisTranscript"},"type":"array"}},"type":"object"},"ContentAnalysisCallParticipant":{"additionalProperties":false,"description":"A participant in a call content analysis. Connections are required to identify which\nparticipant is present in which recording or transcript.","properties":{"connections":{"description":"A list of connections on the content source for this participant.\n\nUsed to identify which participant is present in which recording or transcript.","items":{"$ref":"#/components/schemas/ContentAnalysisParticipantConnection"},"type":"array"},"data":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisUserParticipantData"},{"$ref":"#/components/schemas/ContentAnalysisContactParticipantData"}],"description":"The payload containing information about the participant.\n\nThe value of this field is dependent on the value of the `type` field:\n\n* `user`: The user data containing their email and other optional fields\n* `contact`: The contact data containing their phone number in E164 format and other optional fields"},"displayName":{"description":"The display name of the participant.","type":"string"},"id":{"description":"The ID of the participant in the vendor system.","type":"string"},"type":{"$ref":"#/components/schemas/ContentAnalysisParticipantType"}},"required":["connections","data","displayName","id","type"],"type":"object"},"ContentAnalysisCallRequest":{"additionalProperties":false,"description":"The payload for analyzing content from a call source.","properties":{"analyzer":{"$ref":"#/components/schemas/ContentAnalysisRequestAnalyzer"},"content":{"$ref":"#/components/schemas/ContentAnalysisCallContent"},"participants":{"description":"The list of participants in the call","items":{"$ref":"#/components/schemas/ContentAnalysisCallParticipant"},"type":"array"},"passthroughParameters":{"description":"Passthrough parameters to include with the content analysis results. Use passthrough parameters to initiate and trace the analysis from other systems.\n\nPassthrough parameters can only be specified when the content analysis is created.","type":"object"},"source":{"$ref":"#/components/schemas/ContentAnalysisCallSource"}},"required":["content","participants","source"],"type":"object"},"ContentAnalysisCallSource":{"additionalProperties":false,"description":"The source when the content being analyzed originates from a call.","properties":{"data":{"anyOf":[{"additionalProperties":true,"properties":{},"type":"object"},{"$ref":"#/components/schemas/Call"}],"description":"The call resource from the vendor system."},"endedTimestamp":{"description":"Unix timestamp in milliseconds when the source ended","type":"number"},"id":{"description":"The ID of the source in the vendor system.","type":"string"},"product":{"description":"The product name provided by the vendor that the source originates from, e.g. Connect (Spoke), Flex (Twilio) etc","type":"string"},"startedTimestamp":{"description":"Unix timestamp in milliseconds when the source started","type":"number"},"type":{"const":"call","type":"string"},"url":{"description":"The URL to the source in the vendor system","type":"string"},"vendor":{"description":"The name of the system that provides the source, e.g. Spoke, Twilio, Zoom etc.","type":"string"}},"required":["data","id","product","type","vendor"],"type":"object"},"ContentAnalysisConfig":{"additionalProperties":false,"properties":{"defaultProfile":{"$ref":"#/components/schemas/Nullable_ContentAnalysisLensGroupIdentifiers_"},"description":{"description":"Description of the organisation","type":"string"},"locale":{"description":"Default locale used when performing a content analysis, e.g. `en-US`","type":"string"},"organisationId":{"description":"ID of the Spoke organisation","type":"string"},"profiles":{"description":"A list of profiles, which describe which lens group to use for a given set of users when performing a content analysis","items":{"$ref":"#/components/schemas/ContentAnalysisConfigProfile"},"type":"array"},"timezone":{"description":"Default timezone used when performing a content analysis. It must follow the IANA format, e.g. `America/New_York`","type":"string"}},"required":["defaultProfile","description","locale","organisationId","profiles","timezone"],"type":"object"},"ContentAnalysisConfigDefaultProfile":{"$ref":"#/components/schemas/ContentAnalysisLensGroupIdentifiers"},"ContentAnalysisConfigProfile":{"additionalProperties":false,"properties":{"name":{"description":"The name of the lens group to apply when this profile is applied, e.g. `freight-and-logistics`\n\nThis name and the namespace will be used to identify the lenses when performing a content analysis.","type":"string"},"namespace":{"description":"The namespace of the lens group. For example, this may be the `organisationId` for organisation-specific lens groups.\n\nIf provided, the lens group name must refer to a valid lens group within the namespace.\nIf not provided, the lens group name must refer to a valid global lens group.","type":"string"},"users":{"description":"A list of email addresses of users to apply the profile to","items":{"type":"string"},"type":"array"}},"required":["name","users"],"type":"object"},"ContentAnalysisContactParticipantData":{"additionalProperties":false,"description":"The information about the contact.","properties":{"companyName":{"description":"The contact's company name","type":"string"},"jobTitle":{"description":"The contact's job title","type":"string"},"numberE164":{"description":"The contact's phone number in +E164 format. e.g. +16508221060","type":"string"}},"required":["numberE164"],"type":"object"},"ContentAnalysisDocument":{"additionalProperties":false,"properties":{"name":{"description":"The name of this document. The analyzer uses this to identify which document it requires.","type":"string"},"text":{"description":"The document content.","type":"string"}},"required":["name","text"],"type":"object"},"ContentAnalysisEventData":{"additionalProperties":false,"properties":{"contentAnalysis":{"$ref":"#/components/schemas/ContentAnalysis"}},"required":["contentAnalysis"],"type":"object"},"ContentAnalysisFailure":{"additionalProperties":false,"description":"Details of the analysis failure. Only provided when the analysis failed.","properties":{"description":{"description":"The description of the failure","type":"string"},"reason":{"$ref":"#/components/schemas/ContentAnalysisFailureReason"}},"required":["reason"],"type":"object"},"ContentAnalysisFailureReason":{"description":"The reason for the analysis failure. One of:\n* `contentInaccessible`: The content provided in the request is not accessible e.g. recording URLs are not valid.\n* `transcriptionFailed`: The recordings provided in the request could not be transcribed.\n* `invalidRequest`: The request contains invalid data.\n* `fatalError`: A fatal error occurred during the content analysis process.","enum":["contentInaccessible","fatalError","invalidRequest","transcriptionFailed"],"type":"string"},"ContentAnalysisLensGroupIdentifiers":{"additionalProperties":false,"properties":{"name":{"description":"The name of the lens group to apply when this profile is applied, e.g. `freight-and-logistics`\n\nThis name and the namespace will be used to identify the lenses when performing a content analysis.","type":"string"},"namespace":{"description":"The namespace of the lens group. For example, this may be the `organisationId` for organisation-specific lens groups.\n\nIf provided, the lens group name must refer to a valid lens group within the namespace.\nIf not provided, the lens group name must refer to a valid global lens group.","type":"string"}},"required":["name"],"type":"object"},"ContentAnalysisParticipant":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisCallParticipant"},{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsParticipant"}],"description":"The participant in the content being analyzed."},"ContentAnalysisParticipantConnection":{"additionalProperties":false,"properties":{"joinedTimestamp":{"description":"Unix timestamp in milliseconds when the participant joined the source for this connection","type":"number"},"leftTimestamp":{"description":"Unix timestamp in milliseconds when the participant left the source for this connection","type":"number"},"recordingChannel":{"description":"The audio channel of the participant for this connection.\n\nUse zero-based numbering, i.e.:\n- `0`: The first channel\n- `1`: The second channel\n- ...\n\nMust be specified when analyzing audio recordings. The channel must exist in the corresponding recording.","type":"number"}},"required":["joinedTimestamp","leftTimestamp"],"type":"object"},"ContentAnalysisParticipantType":{"description":"The type of the participant. One of:\n* `user`: A user on the vendor system\n* `contact`: An external contact","enum":["contact","user"],"type":"string"},"ContentAnalysisRecording":{"additionalProperties":false,"properties":{"channels":{"description":"The number of channels in the recording.","type":"number"},"endedTimestamp":{"description":"Unix timestamp in milliseconds when the recording ended.","type":"number"},"id":{"description":"The ID of the recording","type":"string"},"startedTimestamp":{"description":"Unix timestamp in milliseconds when the recording started.","type":"number"},"transcriptionModel":{"description":"The transcription model that should be used to transcribe the recording.\n\nIf not provided, the default transcription model will be used according to the source type.","enum":["call","voicemail"],"type":"string"},"url":{"description":"The URL of the recording. Must be a publicly accessible HTTPS URL while the request is being processed, or a Twilio Recording URL from the Twilio account\nlinked with Spoke.","type":"string"}},"required":["channels","endedTimestamp","id","startedTimestamp","url"],"type":"object"},"ContentAnalysisRequestAnalyzer":{"additionalProperties":false,"description":"The analyzer to be used when analyzing the content.\n\nIf provided and valid, this will be used instead of the default analyzer for the given source type.","properties":{"name":{"description":"The name of the analyzer","type":"string"}},"required":["name"],"type":"object"},"ContentAnalysisRequestContent":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisCallContent"},{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsContent"}],"description":"The content to be processed and analyzed."},"ContentAnalysisResult":{"additionalProperties":false,"description":"The result of the analysis","properties":{"artifacts":{"description":"The list of artifacts created from the analysis process","items":{"$ref":"#/components/schemas/ContentAnalysisResultArtifact"},"type":"array"},"transcripts":{"description":"The transcripts created from the recordings","items":{"$ref":"#/components/schemas/Transcript"},"type":"array"}},"required":["artifacts","transcripts"],"type":"object"},"ContentAnalysisResultArtifact":{"additionalProperties":false,"properties":{"data":{"description":"The artifact payload","type":"object"},"schema":{"description":"The name of the JSON schema this artifact conforms to","type":"string"},"usage":{"description":"The model token usage to produce the artifact","items":{"$ref":"#/components/schemas/ResourceUsage"},"type":"array"}},"required":["data","schema"],"type":"object"},"ContentAnalysisSource":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisCallSource"},{"$ref":"#/components/schemas/ContentAnalysisAgentScorecardsSource"}],"description":"The source or origin of the content being analyzed."},"ContentAnalysisSourceType":{"description":"The type of the source.","enum":["agentScorecards","call"],"type":"string"},"ContentAnalysisStatus":{"description":"The analysis status. One of:\n* `queued`: The request has been received and queued.\n* `transcribing`: The recordings provided in the request are being transcribed.\n* `analyzing`: The content is being analyzed.\n* `succeeded`: Analysis succeeded and the artifacts are available.\n* `failed`: Analysis failed. Check the error details for more information.","enum":["analyzing","failed","queued","succeeded","transcribing"],"type":"string"},"ContentAnalysisTranscript":{"additionalProperties":false,"properties":{"endedTimestamp":{"description":"Unix timestamp in milliseconds when the transcript ended.","type":"number"},"id":{"description":"The ID of the transcript","type":"string"},"startedTimestamp":{"description":"Unix timestamp in milliseconds when the transcript started.","type":"number"},"text":{"description":"The transcript text.\n\nExample:\n\n`\"[JOIN: Speaker 1 (0:00)]\\n[Speaker 1 (0:01)]: Hello. This is a test transcription. \\n[LEAVE: Speaker 1 (0:06)]\"`","type":"string"}},"required":["endedTimestamp","id","startedTimestamp","text"],"type":"object"},"ContentAnalysisTranscriptionModel":{"description":"The transcription model that should be used to transcribe the recording.\n\nIf not provided, the default transcription model will be used according to the source type.","enum":["call","voicemail"],"type":"string"},"ContentAnalysisUserParticipantData":{"additionalProperties":false,"description":"The information about the user.","properties":{"email":{"description":"The user's email","type":"string"},"jobTitle":{"description":"The user's job title","type":"string"},"location":{"description":"The user's location","type":"string"},"managerEmail":{"description":"The email of the user's manager","type":"string"},"timezone":{"description":"The user's timezone represented as an IANA timezone database name (e.g. `America/Los_Angeles`).","type":"string"}},"required":["email"],"type":"object"},"ContentTemplate":{"additionalProperties":false,"properties":{"approvalStatus":{"enum":["approved","disabled","paused","pending","received","rejected","unsubmitted"],"type":"string"},"friendlyName":{"type":"string"},"language":{"type":"string"},"languageCode":{"type":"string"},"sid":{"type":"string"},"types":{"properties":{},"type":"object"},"variables":{"$ref":"#/components/schemas/Record_string_string_"}},"required":["friendlyName","language","languageCode","sid","types"],"type":"object"},"Conversation":{"anyOf":[{"$ref":"#/components/schemas/SmsConversation"},{"$ref":"#/components/schemas/WhatsAppConversation"},{"$ref":"#/components/schemas/GroupMmsConversation"},{"$ref":"#/components/schemas/InternalConversation"}]},"ConversationAddParticipantEventData":{"additionalProperties":false,"properties":{"addedBy":{"$ref":"#/components/schemas/ParticipantModifiedBy"},"conversationSid":{"type":"string"},"participant":{"$ref":"#/components/schemas/ConversationAddRemoveParticipant"}},"required":["addedBy","conversationSid","participant"],"type":"object"},"ConversationAddRemoveContactParticipant":{"additionalProperties":false,"properties":{"companyAddress":{"type":"string"},"contactAddress":{"type":"string"},"contactId":{"type":"string"},"type":{"const":"contact","type":"string"}},"required":["companyAddress","contactAddress","type"],"type":"object"},"ConversationAddRemoveParticipant":{"anyOf":[{"$ref":"#/components/schemas/UserParticipant"},{"additionalProperties":false,"properties":{"companyAddress":{"type":"string"},"contactAddress":{"type":"string"},"contactId":{"type":"string"},"type":{"const":"contact","type":"string"}},"required":["companyAddress","contactAddress","type"],"type":"object"}]},"ConversationAssignContactEventData":{"additionalProperties":false,"properties":{"contactAddress":{"type":"string"},"contactId":{"type":"string"},"conversationSid":{"type":"string"},"phonebookId":{"type":"string"}},"required":["contactAddress","contactId","conversationSid","phonebookId"],"type":"object"},"ConversationClaimEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"memberId":{"type":"string"}},"required":["conversationSid","memberId"],"type":"object"},"ConversationCloseEventData":{"additionalProperties":false,"properties":{"conversationSids":{"items":{"type":"string"},"type":"array"},"memberId":{"type":"string"}},"required":["conversationSids","memberId"],"type":"object"},"ConversationCloseOrLeaveEventData":{"additionalProperties":false,"properties":{"conversationSids":{"items":{"type":"string"},"type":"array"},"memberId":{"type":"string"}},"required":["conversationSids","memberId"],"type":"object"},"ConversationContentListTemplatesEventData":{"additionalProperties":false,"properties":{"approvalStatus":{"enum":["approved","disabled","paused","pending","received","rejected","unsubmitted"],"type":"string"},"languageCodes":{"items":{"type":"string"},"type":"array"},"languages":{"items":{"type":"string"},"type":"array"}},"type":"object"},"ConversationCreateOrJoinEventData":{"additionalProperties":false,"properties":{"channel":{"anyOf":[{"enum":["groupMms","sms","whatsApp"],"type":"string"},{"nullable":true}]},"companyAddress":{"type":"string"},"friendlyName":{"type":"string"},"memberId":{"type":"string"},"participants":{"items":{"$ref":"#/components/schemas/CreateOrJoinConversationData.Participant"},"type":"array"}},"required":["channel","companyAddress","friendlyName","memberId","participants"],"type":"object"},"ConversationDirectoryEntry":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},"ConversationDirectoryEntryType":{"enum":["team","user"],"type":"string"},"ConversationEventData":{"additionalProperties":false,"properties":{"conversation":{"$ref":"#/components/schemas/Conversation"}},"required":["conversation"],"type":"object"},"ConversationEventDataType":{"additionalProperties":false,"properties":{"conversation":{"$ref":"#/components/schemas/Conversation"}},"required":["conversation"],"type":"object"},"ConversationGetEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"}},"required":["conversationSid"],"type":"object"},"ConversationGetMessageEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"messageId":{"type":"string"}},"required":["conversationSid","messageId"],"type":"object"},"ConversationInitiatorType":{"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API","enum":["api","contact","user"],"type":"string"},"ConversationInsightRequestParameters":{"additionalProperties":false,"properties":{"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThis field will be null for Spoke internal conversations (where `isInternal` is true).","nullable":true,"type":"string"},"contactEmail":{"description":"The email address of the contact who originated or received the conversation\n\nFor Spoke internal conversations, this field will contain the email of the Spoke user. For conversations with phonebook\ncontacts, this field will contain the first email stored in the phonebook for that contact.\n\nThis field will be null for conversations with phone numbers that do not match any phonebook contacts, or if\nthe phonebook contact has no email.","nullable":true,"type":"string"},"contactId":{"description":"The identifier of the contact who originated or received this conversation.\n\nFor Spoke internal conversations, this field will contain the Spoke user identifier. For conversations with phonebook\ncontacts, this field will contain the identifier of that contact.\n\nThis field will be null for conversations with phone numbers that do not match any phonebook contacts.","nullable":true,"type":"string"},"contactNumber":{"description":"The phone number of the external party that originated or received this conversation.\n\nThis field will be null for Spoke internal conversations (where `isInternal` is true).","nullable":true,"type":"string"},"contactSource":{"description":"The name of the phonebook that the contact who originated or received the conversation\nbelongs to (e.g. `Zoho` or `My CSV-Upload Phonebook`).\n\nThe contactSource field will match the phonebook name as listed in the\n[Spoke Account Portal integrations page](https://account.spokephone.com/integrations).\n\nThis field will be null when `isInternal` is true.","nullable":true,"type":"string"},"initiatedBy":{"$ref":"#/components/schemas/ConversationInitiatorType"},"isInternal":{"description":"Indicates whether the conversation is an internal (Spoke User to Spoke User) conversation. If this flag is true\nthen there is no external party in the conversation, and the `contactNumber`, `companyNumber` and `contactSource` fields\nwill be empty.","type":"boolean"},"requestOrigin":{"const":"spoke.conversation","description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.conversation`: Denotes Conversation Insights being requested from the Spoke Phone app","type":"string"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation.","type":"string"}},"required":["initiatedBy","isInternal","requestOrigin","userEmail","vendorConversationId"],"type":"object"},"ConversationParticipant.Contact":{"additionalProperties":false,"properties":{"address":{"description":"The address of the external participant in the conversation.\n\nThe possible values for this field depends on the value of the conversation `channel`:\n* `sms`: A phone number in +E164 format (e.g. `+16508221060`)\n* `groupMms`: A phone number in +E164 format (e.g. `+16508221060`)\n* `whatsApp`: A WhatsApp address (e.g. `whatsapp:+16508221060`)","type":"string"},"displayName":{"description":"If there is a matching phonebook contact, this field will contain the display name field from the contact, otherwise this field will contain the\nparticipant's phone number in international format (e.g. `+1 650-822-1060`).","type":"string"},"id":{"description":"The ID of the phonebook contact (if any) associated with the external participant in the conversation. This field and the `phonebookId` field identify\nthe contact in the Spoke Phonebooks API.\n\nThis field will be missing if there is no matching phonebook contact.","type":"string"},"phonebookId":{"description":"The ID of the phonebook that the contact belongs to (if any). This field and the `id` field identify the contact in the Spoke Phonebooks API.\n\nThis field will be missing if there is no matching phonebook contact.","type":"string"},"type":{"const":"contact","description":"The type of the participant in the conversation.\n\nThis field will always be `contact`, indicating that the participant is an external contact.","type":"string"}},"required":["address","displayName","type"],"type":"object"},"ConversationParticipant.User":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory. This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"The email address of the user in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the user in the Spoke directory.","type":"string"},"type":{"const":"user","description":"The type of the participant in the conversation.\n\nThis field will always be `user`, indicating that the participant is a Spoke user.","type":"string"}},"required":["displayName","id","type"],"type":"object"},"ConversationPassthroughParametersResponse":{"additionalProperties":false,"description":"If specified, stores the passthrough parameters against the conversation.\n\nEach passthrough parameter key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be ignored.\n\nThe maximum size of passthrough parameters is 1000 bytes.\n\nExample:\n```json\n{\n  \"x-contactId\": \"HS12345\",\n  \"x-orderId\": \"ORD12345\"\n}\n```","type":"object"},"ConversationRemoveParticipantEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"participant":{"$ref":"#/components/schemas/ConversationAddRemoveParticipant"},"removedBy":{"$ref":"#/components/schemas/ParticipantModifiedBy"}},"required":["conversationSid","participant","removedBy"],"type":"object"},"ConversationSendMessageEventData":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"conversationSid":{"type":"string"},"messageId":{"type":"string"}},"required":["author","body","conversationSid","messageId"],"type":"object"},"ConversationUpdateEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"name":{"type":"string"}},"required":["conversationSid","name"],"type":"object"},"ConversationWithoutContact":{"additionalProperties":false,"properties":{"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"channel":{"anyOf":[{"enum":["groupMms","sms","whatsApp"],"type":"string"},{"nullable":true}],"description":"The type of the conversation channel.\n\nThe value for this field will always be `sms`, signifying that the conversation is an SMS conversation between one or more Spoke users represented by a\nsingle company address and a single external contact address.\nThe type of the conversation channel.\n\nThe value for this field will always be `whatsApp`, signifying that the conversation is a WhatsApp conversation between one or more Spoke users and an\nexternal party.\nThe type of the conversation channel.\n\nThe value for this field will always be `groupMms`, signifying that the conversation is a Group MMS conversation between one or more Spoke users\nrepresented by a single company address and multiple external contact addresses.\nThe type of the conversation channel.\n\nThe value for this field will always be `null`, signifying that the conversation is an internal conversation between Spoke users."},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\nThe company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThe value of this field will always be `null` for internal conversations.","nullable":true,"type":"string"},"companyNumberOwner":{"anyOf":[{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},{"nullable":true}],"description":"The entry in the Spoke directory that the `companyNumber` is assigned to. This field is populated\nwhen the conversation is created and is not updated if the conversation is re-assigned to a different\ndirectory entry.\n\nThis field identifies the Spoke team or user that the `companyNumber` is assigned to. It will be\nnull for conversations involving company numbers that are not assigned to a user or team.\nThe entry in the Spoke directory that the `companyNumber` is assigned to.\n\nThe value of this field will always be `null` for internal conversations."},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `false` for conversations with an external party (i.e. SMS, Group MMS or WhatsApp conversations).\nIndicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `true` for internal conversations.\n\nThis field is provided to simplify integration with CRM platforms. As there is no 'customer' or external\nparty involved in the conversation, these conversations can be excluded from CRM conversation logs.","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"anyOf":[{"items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},{"items":{"$ref":"#/components/schemas/ConversationParticipant.User"},"type":"array"}],"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.\nA list of the participants in this conversation.\n\nFor internal conversations, this list will only contain Spoke user participants."},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["channel","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"CreateConversationMessageE164Sender":{"additionalProperties":false,"properties":{"companyAddress":{"description":"The company number to send from. Must be in +E164 format.","type":"string"},"type":{"const":"e164","description":"The type of sender.\n\nThe value for this field must be `e164`, signifying that the message is sent from the company phone number provided in `companyAddress`.","type":"string"}},"required":["companyAddress","type"],"type":"object"},"CreateConversationMessageSender":{"anyOf":[{"$ref":"#/components/schemas/CreateConversationMessageE164Sender"},{"$ref":"#/components/schemas/CreateConversationMessageUserEmailSender"}],"description":"Identifies which phone number the message is sent from."},"CreateConversationMessageUserEmailSender":{"additionalProperties":false,"properties":{"email":{"description":"The email address of a user in your Spoke account whose conversation phone number will be used as the sending DDI.","type":"string"},"type":{"const":"userEmail","description":"The type of sender.\n\nThe value for this field must be `userEmail`, signifying that the message\nis sent from the conversation phone number of the user identified by `email`.","type":"string"}},"required":["email","type"],"type":"object"},"CreateGroupMmsTeamMessageBody":{"additionalProperties":false,"properties":{"assignUsers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"nullable":true}],"description":"Required if routingAction is `assign_users`.  A list of user email addresses to assign to the conversation.\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.\nAssignment behaviour depends on the value of routingAction:\n\n* `assign_users`: Only assign the users defined in the request payload\n\n* `assign_team`: Assign the users defined in the request payload in addition to the team’s users."},"channel":{"const":"groupMms","description":"The type of the conversation channel.\n\nThe value for this field must be `groupMms`, signifying that the message is a Group MMS message to multiple contacts.","type":"string"},"claimRule":{"anyOf":[{"enum":["claimable","not_claimable","required_before_reply"],"type":"string"},{"nullable":true}],"description":"If provided, sets the claim rule for a newly created conversation. The value is ignored if the conversation already exists."},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","nullable":true,"type":"string"},"companyAddress":{"description":"The company number to use as the sender Id.  Must be in +E164 format.","type":"string"},"contactAddresses":{"description":"The numbers of the contacts to send the message to. Must be in +E164 format.\nThere must be more than 1 contact address for a Group MMS message.","items":{"type":"string"},"type":"array"},"conversationName":{"description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long.","nullable":true,"type":"string"},"messageContent":{"$ref":"#/components/schemas/CreateMessageContent"},"notifyUsers":{"description":"Controls whether notifications for this message are sent to users.\n\nWhen a conversation already exists between the company address and the contact address(es),\nsetting `notifyUsers` to `false` will still notify the existing participants.","nullable":true,"type":"boolean"},"passthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"routingAction":{"anyOf":[{"enum":["assign_team","assign_users","do_not_route"],"type":"string"},{"nullable":true}],"description":"Defines whether to assign users to the conversation that is created as a result of the message."}},"required":["channel","companyAddress","contactAddresses","messageContent"],"type":"object"},"CreateMessageContent":{"additionalProperties":false,"properties":{"author":{"description":"If included, this will show as the participant name in the conversation.  It will not be visible to external participants.\nIf not included, the name of the associated team will be used.\n\nThe `sendAsUser` field must not be provided when this field is provided.","nullable":true,"type":"string"},"body":{"description":"The content of the message.  Can be up to 1600 characters long.  Messages longer than 160 characters will incur a\nper-message for each 160 character block.","type":"string"},"sendAsUser":{"description":"If included, then the message will appear in the Spoke app and `conversation.message.*` webhook events as if the user has sent the message.  The following\nrules apply:\n\n* The value of this field must be the email address of a user in your Spoke account.\n* The user must be a participant in the conversation. To ensure the user is assigned to the conversation, specify their email address in the `assignUsers`\narray.\n* The `author` field must not be provided when this field is provided.","nullable":true,"type":"string"}},"required":["body"],"type":"object"},"CreateMessagePassthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"CreateOrJoinConversationData.ContactParticipant":{"additionalProperties":false,"properties":{"contactAddress":{"type":"string"},"contactId":{"type":"string"},"phonebookId":{"type":"string"},"type":{"const":"contact","type":"string"}},"required":["contactAddress","type"],"type":"object"},"CreateOrJoinConversationData.Participant":{"anyOf":[{"$ref":"#/components/schemas/CreateOrJoinConversationData.UserParticipant"},{"$ref":"#/components/schemas/CreateOrJoinConversationData.ContactParticipant"}]},"CreateOrJoinConversationData.UserParticipant":{"additionalProperties":false,"properties":{"memberId":{"type":"string"},"type":{"const":"user","type":"string"}},"required":["memberId","type"],"type":"object"},"CreateSmsTeamMessageBody":{"additionalProperties":false,"properties":{"assignUsers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"nullable":true}],"description":"Required if routingAction is `assign_users`.  A list of user email addresses to assign to the conversation.\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.\nAssignment behaviour depends on the value of routingAction:\n\n* `assign_users`: Only assign the users defined in the request payload\n\n* `assign_team`: Assign the users defined in the request payload in addition to the team’s users."},"channel":{"description":"The type of the conversation channel.\n\nThis field is optional and defaults to the `sms` channel if not provided.\nIf provided, the value must be `sms`, signifying that the message is an SMS message to a single contact.","type":"string"},"claimRule":{"anyOf":[{"enum":["claimable","not_claimable","required_before_reply"],"type":"string"},{"nullable":true}],"description":"If provided, sets the claim rule for a newly created conversation. The value is ignored if the conversation already exists."},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","nullable":true,"type":"string"},"companyAddress":{"description":"The company number to use as the sender Id.  Must be in +E164 format.","type":"string"},"contactAddress":{"description":"The number of the contact to send the message to. Must be in +E164 format.","type":"string"},"conversationName":{"description":"If provided, then use the provided value to set the initial Conversation Name.  This value displays in\nthe conversations list in the Spoke application. Can be up to 100 characters long.","nullable":true,"type":"string"},"messageContent":{"$ref":"#/components/schemas/CreateMessageContent"},"notifyUsers":{"description":"Controls whether notifications for this message are sent to users.\n\nWhen a conversation already exists between the company address and the contact address(es),\nsetting `notifyUsers` to `false` will still notify the existing participants.","nullable":true,"type":"boolean"},"passthroughParameters":{"additionalProperties":true,"description":"If provided, stores passthrough parameters against the conversation. Passthrough parameters are included in the conversation's webhook events.\n\nUse passthrough parameters to track conversations, ensuring the outcome of a conversation can be associated correctly with your external applications (such\nas CRM or in-house systems).\n\nPassthrough parameters are key-value pairs. Each key must start with the prefix `x-` and the value must be a string. Otherwise, the parameter will be\nignored.\n\nExample:\n```json\n{\n  ...\n  passthroughParameters: {\n    \"x-contactId\": \"HS12345\",\n    \"x-orderId\": \"ORD12345\"\n  }\n}\n```\n\nIf the conversation already exists and has passthrough parameters, the new parameters will be merged with the existing parameters. If a key exists in both\nthe existing passthrough parameters and the new passthrough parameters, the new parameter value will overwrite the existing value.\n\nThe maximum size of passthrough parameters is 1000 bytes. If the merged passthrough parameters exceed 1000 bytes, then the stored passthrough parameters will\nnot be updated.","properties":{},"type":"object"},"routingAction":{"anyOf":[{"enum":["assign_team","assign_users","do_not_route"],"type":"string"},{"nullable":true}],"description":"Defines whether to assign users to the conversation that is created as a result of the message."}},"required":["companyAddress","contactAddress","messageContent"],"type":"object"},"CreateWebhookRequest":{"additionalProperties":false,"properties":{"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","items":{"$ref":"#/components/schemas/EventType"},"type":"array"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["events","url"],"type":"object"},"CreateWebhookRequestBody":{"additionalProperties":false,"properties":{"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","items":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","type":"string"},"type":"array"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["events","url"],"type":"object"},"CurrentCallGroupOfferConfig":{"additionalProperties":false,"description":"Configuration that shows how the call will be offered to the team.","properties":{"nextOfferTimeout":{"description":"Number of seconds Spoke will wait before offering the call to the next available user(s).","type":"number"},"timeout":{"description":"Number of seconds Spoke will wait for someone to answer the call.","type":"number"},"users":{"$ref":"#/components/schemas/CurrentCallGroupUsers"}},"required":["nextOfferTimeout","timeout","users"],"type":"object"},"CurrentCallGroupUsers":{"additionalProperties":false,"description":"Lists of users the call will be offered to.","properties":{"group1":{"description":"List of user emails the call will be offered to first. This is equivalent to users who have the `Call First` flag enabled in the team call configuration in\nthe Spoke account portal.","items":{"type":"string"},"type":"array"},"group2":{"description":"List of user emails the call will be offered to when no one in the first group is available, or no one in the first group answers the call.","items":{"type":"string"},"type":"array"}},"required":["group1","group2"],"type":"object"},"DataActionRequestBody":{"additionalProperties":false,"properties":{"actionType":{"$ref":"#/components/schemas/DataActionTypeEnum"},"parameters":{"anyOf":[{"$ref":"#/components/schemas/CallInsightRequestParameters"},{"$ref":"#/components/schemas/ConversationInsightRequestParameters"},{"$ref":"#/components/schemas/ExternalContactInsightRequestParameters"},{"$ref":"#/components/schemas/InternalContactInsightRequestParameters"},{"nullable":true}],"description":"The parameters to be included when performing data action request"}},"required":["actionType"],"type":"object"},"DataActionRequestParameters":{"anyOf":[{"$ref":"#/components/schemas/CallInsightRequestParameters"},{"$ref":"#/components/schemas/ConversationInsightRequestParameters"},{"$ref":"#/components/schemas/ExternalContactInsightRequestParameters"},{"$ref":"#/components/schemas/InternalContactInsightRequestParameters"}]},"DataActionTypeEnum":{"description":"The type of the data action.\n\nPossible values:\n\n- outboundCall\n- insight\n- inboundCall\n- callGroup\n- inboundConversation","enum":["callGroup","inboundCall","inboundConversation","insight","outboundCall"],"type":"string"},"DataType":{"additionalProperties":false,"type":"object"},"DataType_1":{"additionalProperties":false,"type":"object"},"DeleteCallRecordingRequest":{"additionalProperties":false,"properties":{"callId":{"description":"The ID of the call this recording belongs to","type":"string"},"recordingId":{"description":"The call recording ID to delete","type":"string"}},"required":["callId","recordingId"],"type":"object"},"DeleteContactRequest":{"additionalProperties":false,"properties":{"id":{"description":"ID of the contact to detete","type":"string"},"phonebookId":{"description":"The phonebook ID that the contact belongs to","type":"string"}},"required":["id","phonebookId"],"type":"object"},"DeletePhonebookRequest":{"additionalProperties":false,"properties":{"id":{"description":"The phonebook ID to delete","type":"string"}},"required":["id"],"type":"object"},"DeleteWebhookRequest":{"additionalProperties":false,"properties":{"id":{"description":"The webhook ID","type":"string"}},"required":["id"],"type":"object"},"DeliveryAttempt":{"additionalProperties":false,"properties":{"created":{"type":"string"},"eventId":{"type":"string"},"id":{"type":"string"},"organisationId":{"type":"string"},"requestBody":{"type":"string"},"responseBody":{"type":"string"},"responseTimeMs":{"type":"number"},"status":{"$ref":"#/components/schemas/DeliveryStatus"},"statusMessage":{"type":"string"},"timestamp":{"type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"url":{"type":"string"},"webhookId":{"type":"string"}},"required":["created","eventId","id","organisationId","requestBody","status","statusMessage","timestamp","type","url","webhookId"],"type":"object"},"DeliveryAttemptRequest":{"additionalProperties":false,"properties":{"eventId":{"type":"string"},"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"},"status":{"enum":["failed","succeeded"],"type":"string"},"webhookId":{"type":"string"}},"type":"object"},"DeliveryAttemptsResponse":{"additionalProperties":false,"properties":{"deliveryAttempts":{"items":{"additionalProperties":false,"properties":{"created":{"type":"string"},"eventId":{"type":"string"},"id":{"type":"string"},"organisationId":{"type":"string"},"requestBody":{"type":"string"},"responseBody":{"type":"string"},"responseTimeMs":{"type":"number"},"status":{"enum":["failed","succeeded"],"type":"string"},"statusMessage":{"type":"string"},"timestamp":{"type":"number"},"type":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","type":"string"},"url":{"type":"string"},"webhookId":{"type":"string"}},"required":["created","eventId","id","organisationId","requestBody","status","statusMessage","timestamp","type","url","webhookId"],"type":"object"},"type":"array"},"meta":{"additionalProperties":false,"properties":{"next":{"description":"Used for result set pagination.  If this value is non-null, pass the value as the \"next\" parameter\nin the subsequent GET request to retrieve the next page of result data.","type":"string","nullable":true}},"type":"object"}},"required":["deliveryAttempts","meta"],"type":"object"},"DeliveryStatus":{"enum":["failed","succeeded"],"type":"string"},"DeprecatedDirectoryTarget":{"additionalProperties":false,"description":"** DEPRECATED ** Use the `assignedCallGroup` field instead.","properties":{"displayName":{"description":"The display name of the entry in the Spoke directory. This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"extension":{"description":"The extension of the entry in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory.","type":"string"},"type":{"const":"team","description":"The type of the entry in the Spoke directory.\nThis value will be `team` for the calls to the team.","type":"string"}},"required":["id","type"],"type":"object"},"DeprecatedInsightDataActionResponse":{"items":{"$ref":"#/components/schemas/InsightCard"},"type":"array"},"DesktopReleaseChannel":{"description":"The user's current enrolled release channel for the Spoke Phone desktop application.\n\nThis field will contain one of the following values:\n\n - ***stable***: latest stable release\n - ***beta***: beta pre-release\n - ***alpha***: alpha early access release","enum":["stable","beta","alpha"],"type":"string"},"Device":{"additionalProperties":false,"properties":{"deviceType":{"enum":["deskPhone","softPhone"],"type":"string"},"displayName":{"description":"The display name of this directory entry.","type":"string"},"extension":{"type":"string"},"id":{"description":"The id of the device.","type":"string"},"sipAddress":{"description":"The device's SIP address","type":"string"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"device","type":"string"}},"required":["displayName","id","type"],"type":"object"},"DeviceType":{"enum":["deskPhone","softPhone"],"type":"string"},"DialPermission":{"enum":["allowed","blocked"],"type":"string"},"DirectoryEntries":{"items":{"$ref":"#/components/schemas/DirectoryEntry"},"type":"array"},"DirectoryEntryTypeEnum":{"enum":["device","team","user","trunkUser","trunkDevice","trunkQueue","contact"],"type":"string"},"DirectoryPhoneNumber":{"additionalProperties":false,"properties":{"numberDisplay":{"description":"Phone number in international format e.g. `+1 650-822-1060`","type":"string"},"numberE164":{"description":"Phone number in +E164 format. e.g. `+16508221060`","type":"string"},"numberLocal":{"description":"Phone number in local/national format e.g. `(650) 822-1060`","type":"string"}},"type":"object"},"Email":{"additionalProperties":false,"properties":{"email":{"description":"Email address","nullable":true,"type":"string"},"label":{"description":"Email label e.g. work, personal","type":"string"}},"required":["label"],"type":"object"},"EnlightenInsightCardDisplay":{"enum":["after","before","hidden"],"type":"string"},"EnlightenInsightCardPreferences":{"additionalProperties":false,"description":"Preferences for Enlighten Insights Cards.\n\nRequires Enlighten Call Insights to be enabled to take effect.","properties":{"display":{"description":"Where to display Enlighten Insights Cards relative to the `cards` in the response.\n\nPossible values:\n- `before`: Display Enlighten Insights Cards before the `cards` in the response\n- `after`: Display Enlighten Insights Cards after the `cards` in the response\n- `hidden`: Do not display Enlighten Insights Cards\n\nDefaults to `after`.","enum":["after","before","hidden"],"type":"string"}},"type":"object"},"ErrorResponse":{"additionalProperties":false,"properties":{"message":{"description":"Optional error message","type":"string"},"type":{"description":"Type of the error response","type":"string"}},"required":["type"],"type":"object"},"Event":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/EventDataType"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"EventBridgeEvent.TDetailType":{"enum":["call.answered","call.contact_assigned","call.contact_assigned_with_add","call.contact_assigned_with_update","call.ended","call.form.started","call.form.submitted","call.highlight.created","call.highlight.recording_available","call.hungup","call.not_answered","call.note.created","call.recording.available","call.started","call.tariffed","call.transcript.created","call.transcription_completed","call.voicemail.available","callRecording.batchUpdateAutoExpiry","callRecording.delete","callRecordingTranscription.checkCompleted","callRecordingTranscription.requested","callRecordingTranscription.skipped","config.modified","contact.shared","content_analysis.completed","conversation.addParticipant","conversation.assignContact","conversation.claim","conversation.close","conversation.closeOrLeave","conversation.closed","conversation.contact_assigned","conversation.createOrJoin","conversation.get","conversation.getMessage","conversation.inactive","conversation.message.created","conversation.removeParticipant","conversation.sendMessage","conversation.update","conversationContentTemplate.list","directorySync.cleanup","directorySync.configure","directorySync.remove","directorySync.updateConfiguration","extension.changed","member.created","member.deleted","member.licenseDisabled","member.licenseEnabled","member.updated","notification.batchSend","organisation.created","organisation.deleted","organisation.updated","phoneNumber.assigned","phoneNumber.configure","phoneNumber.created","phoneNumber.deleted","provisioning.validateAccount.autoConfirm","provisioning.validateAccount.create","provisioning.validateAccount.credentials","team.availability.updated","team.deleted","team.membersAdded","team.membersRemoved","transcript.create","transcript.created","transcription.failed","user.availability.updated","userAvailability.set","userAvailability.unsetOnCall","userAvailabilityRule.get","userAvailabilityRule.upsert","userConversation.get","userConversation.getAssignableContacts","userConversation.getAssociatedContacts","userConversation.update","userSession.expired","userSession.started","vendorAccount.linked","webhook.refreshSigningSecret"],"type":"string"},"EventBridgeEvent.TDetailType_1":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `call.transcription_completed`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","type":"string"},"EventBridgeWebhookEvent":{"additionalProperties":false,"properties":{"account":{"type":"string"},"detail":{"additionalProperties":false,"properties":{"webhookEventId":{"type":"string"}},"required":["webhookEventId"],"type":"object"},"detail-type":{"$ref":"#/components/schemas/EventBridgeEvent.TDetailType_1"},"id":{"type":"string"},"region":{"type":"string"},"replay-name":{"type":"string"},"resources":{"items":{"type":"string"},"type":"array"},"source":{"const":"spoke.webhook","type":"string"},"time":{"type":"string"},"version":{"type":"string"}},"required":["account","detail","detail-type","id","region","resources","source","time","version"],"type":"object"},"EventBridgeWebhookEventDetail":{"additionalProperties":false,"properties":{"webhookEventId":{"type":"string"}},"required":["webhookEventId"],"type":"object"},"EventData":{"additionalProperties":{},"type":"object"},"EventDataType":{"anyOf":[{"$ref":"#/components/schemas/CallEventData"},{"$ref":"#/components/schemas/CallHighlightEventData"},{"$ref":"#/components/schemas/CallNoteEventData"},{"$ref":"#/components/schemas/CallRecordingEventData"},{"$ref":"#/components/schemas/CallVoicemailEventData"},{"$ref":"#/components/schemas/CallFormEventData"},{"$ref":"#/components/schemas/CallTranscriptEventData"},{"$ref":"#/components/schemas/ContentAnalysisEventData"},{"$ref":"#/components/schemas/ConversationEventData"},{"$ref":"#/components/schemas/TeamEventData"},{"$ref":"#/components/schemas/TranscriptEventData"},{"$ref":"#/components/schemas/UserEventData"},{"$ref":"#/components/schemas/ContactSharedWithAddActionEventData"},{"$ref":"#/components/schemas/ContactSharedWithUpdateActionEventData"}]},"EventSource":{"enum":["spoke.aiPipeline","spoke.audio","spoke.billing.integration","spoke.call","spoke.conversation","spoke.core","spoke.notification","spoke.provisioning.integration","spoke.transcription","spoke.userPresence","spoke.webhook"],"type":"string"},"EventType":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `call.transcription_completed`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","type":"string"},"EventVersion":{"const":"2020-07-15","type":"string"},"ExternalContactInsightRequestParameters":{"additionalProperties":false,"properties":{"contactEmail":{"description":"The phonebook contact's email address for which to request Insights data.\n\nIf the contact has multiple emails, this field will be the first email stored in the phonebook for that contact.\n\nThis field will be null if the contact has no email.","nullable":true,"type":"string"},"contactId":{"description":"The identifier of a phonebook contact for which to request Insights data.","type":"string"},"contactSource":{"description":"The name of the phonebook that the contact being looked up belongs to\n(e.g. `Zoho` or `My CSV-Upload Phonebook`).\n\nThe contactSource field will match the phonebook name as listed in the\n[Spoke Account Portal integrations page](https://account.spokephone.com/integrations).","type":"string"},"isInternal":{"const":false,"description":"Indicates whether the contact being looked up is an internal Spoke user.\n\nThis field will be false when looking up a phonebook contact.","type":"boolean"},"requestOrigin":{"const":"spoke.contactlookup","description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.contactlookup`: Denotes Contact Insights being requested from the Spoke Phone app","type":"string"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"}},"required":["contactId","contactSource","isInternal","requestOrigin","userEmail"],"type":"object"},"FirstCallUser":{"additionalProperties":false,"description":"The first user on the call. This is the user who either initiated the call (for outbound calls)\nor answered the call (for inbound calls).","properties":{"email":{"description":"User's email address (as registered in Spoke)","nullable":true,"type":"string"},"firstName":{"description":"User's first name","nullable":true,"type":"string"},"jobTitle":{"description":"User's job title (as registered in Spoke)","nullable":true,"type":"string"},"lastName":{"description":"User's last name","nullable":true,"type":"string"},"location":{"description":"User’s location (as registered in Spoke)","nullable":true,"type":"string"},"manager":{"anyOf":[{"$ref":"#/components/schemas/ManagerUserDirectoryEntry"},{"nullable":true}]},"mobile":{"description":"User's mobile number (as registered in Spoke)\n\nThis will be omitted if the organisation is configured to exclude mobile numbers from API responses","nullable":true,"type":"string"},"userId":{"description":"The id of the user","type":"string"}},"required":["userId"],"type":"object"},"Form":{"additionalProperties":false,"properties":{"description":{"description":"The description of the form","type":"string"},"formData":{"additionalProperties":true,"description":"The data submitted in the form","properties":{},"type":"object"},"id":{"description":"The id of the form","type":"string"},"name":{"description":"The name of the form","type":"string"},"reference":{"description":"Your reference for this form","type":"string"},"startedAt":{"description":"Date/Time (UTC - ISO8601 format) when the user started the form","type":"string"},"startedTimestamp":{"description":"Unix timestamp when the user started the form","type":"number"},"status":{"$ref":"#/components/schemas/FormStatus"},"submittedAt":{"description":"Date/Time (UTC - ISO8601 format) when the user submitted the form","type":"string"},"submittedTimestamp":{"description":"Unix timestamp when the user submitted the form","type":"number"},"type":{"const":"conversation","description":"The type of form","type":"string"},"user":{"$ref":"#/components/schemas/User"}},"required":["description","id","name","reference","startedAt","startedTimestamp","status","type","user"],"type":"object"},"FormStatus":{"enum":["started","submitted"],"type":"string"},"FormType":{"const":"conversation","type":"string"},"GetCallRecordingRequest":{"additionalProperties":false,"properties":{"callId":{"description":"The ID of the call this recording belongs to","type":"string"},"recordingId":{"description":"The call recording ID","type":"string"}},"required":["callId","recordingId"],"type":"object"},"GetContentAnalysisQueryParameters":{"additionalProperties":false,"properties":{"artifact":{"type":"string"},"before":{"type":"string"},"contactNumber":{"type":"string"},"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"},"participantId":{"type":"string"},"since":{"type":"string"},"sourceId":{"type":"string"}},"type":"object"},"GetWebhooksRequest":{"additionalProperties":false,"properties":{"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"}},"type":"object"},"GetWebhooksResponse":{"additionalProperties":false,"properties":{"meta":{"additionalProperties":false,"properties":{"next":{"description":"Used for result set pagination.  If this value is non-null, pass the value as the \"next\" parameter\nin the subsequent GET request to retrieve the next page of result data.","type":"string","nullable":true}},"type":"object"},"webhooks":{"description":"The list of webhooks. May be empty if no webhooks are found.","items":{"additionalProperties":false,"properties":{"createdAt":{"description":"Date/Time (UTC - ISO8601 format) when the webhook was created","type":"string"},"createdTimestamp":{"description":"Unix timestamp when the webhook was created","type":"number"},"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","items":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","type":"string"},"type":"array"},"id":{"description":"ID of the webhook","type":"string"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"signingSecret":{"description":"Signing secret used to sign the webhook requests","type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["createdAt","createdTimestamp","enabled","events","id","mode","signingSecret","url"],"type":"object"},"type":"array"}},"required":["meta","webhooks"],"type":"object"},"GroupMmsConversation":{"additionalProperties":false,"properties":{"assignedContact":{"anyOf":[{"$ref":"#/components/schemas/AssignedContact"},{"nullable":true}],"description":"The phonebook contact (if any) associated with the external party on the conversation."},"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"channel":{"const":"groupMms","description":"The type of the conversation channel.\n\nThe value for this field will always be `groupMms`, signifying that the conversation is a Group MMS conversation between one or more Spoke users\nrepresented by a single company address and multiple external contact addresses.","type":"string"},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.","type":"string"},"companyNumberOwner":{"anyOf":[{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},{"nullable":true}],"description":"The entry in the Spoke directory that the `companyNumber` is assigned to. This field is populated\nwhen the conversation is created and is not updated if the conversation is re-assigned to a different\ndirectory entry.\n\nThis field identifies the Spoke team or user that the `companyNumber` is assigned to. It will be\nnull for conversations involving company numbers that are not assigned to a user or team."},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"const":false,"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `false` for conversations with an external party (i.e. SMS, Group MMS or WhatsApp conversations).","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.","items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["channel","companyNumber","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"Highlight":{"additionalProperties":false,"properties":{"createdAt":{"description":"Date/Time (UTC - ISO8601 format) when the user creates the highlight","type":"string"},"createdByUser":{"$ref":"#/components/schemas/User"},"createdTimestamp":{"description":"Unix timestamp when the user creates the highlight","type":"number"},"duration":{"description":"Duration of the highlight recording in seconds\n\nThis will be omitted if the recording is not yet available","type":"number"},"durationText":{"description":"Duration of the highlight recording in (mm:ss) format\n\nThis will be omitted if the recording is not yet available","type":"string"},"id":{"description":"The id of the highlight","type":"string"},"recordingStartedAt":{"description":"Date/Time (UTC - ISO8601 format) when the highlight recording starts\n\nThis will be omitted if the recording is not yet available","type":"string"},"recordingStartedTimestamp":{"description":"Unix timestamp when the highlight recording starts\n\nThis will be omitted if the recording is not yet available","type":"number"},"recordingUrl":{"description":"URL of the highlight for retrieval\n\nThe URL is a signed url that expires one hour after the highlight was recorded. To get a newly signed URL, GET the call resource from the `/calls/:id` API\nendpoint.\n\nThis will be omitted if\n- the recording is not yet available\n- the query parameter `includeRecordingUrl` is set to false","type":"string"},"recordingUrlExpiresTimestamp":{"description":"Expiry time (unix timestamp) of the signed url. After this time the recording will no longer be retrievable.\n\nThis will be omitted if\n- the recording is not yet available\n- the query parameter `includeRecordingUrl` is set to false","type":"number"},"tags":{"description":"Tags associated with the highlight","items":{"type":"string"},"type":"array"}},"required":["createdAt","createdByUser","createdTimestamp","id"],"type":"object"},"InboundConversationsDataActionRequestPayload":{"anyOf":[{"$ref":"#/components/schemas/InboundSmsConversationsDataActionRequestPayload"},{"$ref":"#/components/schemas/InboundWhatsAppConversationsDataActionRequestPayload"},{"$ref":"#/components/schemas/InboundGroupMmsConversationsDataActionRequestPayload"}]},"InboundConversationsDataActionResponsePayload":{"additionalProperties":false,"properties":{"assignUsers":{"description":"List of users to be added to the conversation. Required when `routingAction` is `assign`.\n\nEach user is identified by their email address in Spoke. Invalid email addresses are ignored.\n\nFor numbers assigned to a team shared inbox, if there are no valid emails in the `assignUsers` payload, the users associated with the team will be assigned\nto the conversation.\n\nA conversation can have up to 10 participants and users will be added to the conversation until this limit is reached.","items":{"type":"string"},"type":"array"},"autoResponseContent":{"$ref":"#/components/schemas/AutoResponseContent"},"claimRule":{"description":"Defines whether a conversation can be claimed by a Spoke user.  Claiming allows a user to take exclusive\nownership of a conversation. Once claimed, other Spoke participants will be removed from the conversation.\n\nFor numbers assigned to a team shared inbox, if no value is provided, then the setting for the team shared inbox will apply.\n\nPossible values:\n* `claimable`: The conversation can be claimed at any time by any user assigned to the conversation\n\n* `not_claimable`: The conversation is not claimable\n\n* `required_before_reply`: A variant of `claimable`, this requires the conversation to be claimed before a reply can be sent to the external participant","enum":["claimable","not_claimable","required_before_reply"],"type":"string"},"closeTimer":{"description":"Set this value to control how long the conversation will remain open before being automatically closed by the system.  The timer is reset any time a\nconversation is updated, including adding new messages.\n\nSpecify the timer value in ISO8601 duration format. For example, to automatically close a conversation:\n\n* After 12 hours: `PT12H`\n* After 30 days: `P30D`\n* After 3 months: `P3M`\n\nThe following are the minimum and maximum values for the field:\n\n* Minimum Value: 600 seconds (`PT600S`)\n* Maximum Value: 180 days (`P180D`)","type":"string"},"name":{"description":"Name of the conversation. Can be up to 100 characters long.","type":"string"},"passthroughParameters":{"$ref":"#/components/schemas/ConversationPassthroughParametersResponse"},"routingAction":{"description":"How the conversation should be handled - `assign` or `donotroute`\n\n`assign`: Assign the message to one or more Spoke users, if this value is set, then `assignUsers` is required\n\n`donotroute`: Do not assign any users. The conversation will remain open however no additional participants will be added to the conversation. You can\nuse this option to block an incoming message due to content, profanity etc.","enum":["assign","donotroute"],"type":"string"}},"type":"object"},"InboundGroupMmsConversationDataActionRequestContact":{"additionalProperties":false,"properties":{"contactAddress":{"description":"The address of the external party in the group MMS conversation.\n\nThe value of this field will always be a phone number in +E164 format (e.g. `+16508221060`)","type":"string"},"contactDisplayName":{"description":"The display name of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"contactId":{"description":"The ID of the phonebook contact (if any) associated with the external party on the call.","type":"string"}},"required":["contactAddress"],"type":"object"},"InboundGroupMmsConversationsDataActionRequestPayload":{"additionalProperties":false,"properties":{"authorContactAddress":{"description":"The address of the external party that originated the conversation.\n\nThe value of this field will always be a phone number in +E164 format (e.g. `+16508221060`)","type":"string"},"channel":{"const":"groupMms","description":"The channel of the inbound conversation.\n\nThe value for this field will always be `groupMms`, signifying that the conversation was originated by an inbound MMS message within a group consisting of\nmultiple contact addresses and a company address","type":"string"},"companyAddress":{"description":"The company number that the conversation was routed to. This will be one of the numbers defined in the Spoke Phone Number settings page.\n\nThe value for this field will always be a phone number in +E164 format (e.g. `+16508221060`)","type":"string"},"contacts":{"description":"The external parties involved in the conversation.","items":{"$ref":"#/components/schemas/InboundGroupMmsConversationDataActionRequestContact"},"type":"array"},"conversationId":{"description":"The Spoke ID of the conversation","type":"string"},"messageContent":{"$ref":"#/components/schemas/MessageContent"},"vendorConversationId":{"description":"The vendor's identifier for the conversation","type":"string"}},"required":["authorContactAddress","channel","companyAddress","contacts","conversationId","messageContent","vendorConversationId"],"type":"object"},"InboundSmsConversationsDataActionRequestPayload":{"additionalProperties":false,"properties":{"channel":{"const":"sms","description":"The channel of the inbound conversation.\n\nThe value for this field will always be `sms`, signifying that the conversation was originated by an inbound SMS message from a single contact address to a\ncompany address","type":"string"},"companyAddress":{"description":"The company number that the conversation was routed to. This will be one of the numbers defined in the Spoke Phone Number settings page.\n\nThe value for this field will always be a phone number in +E164 format (e.g. `+16508221060`)","type":"string"},"contactAddress":{"description":"The address of the external party that originated the conversation.\n\nThe value for this field will always be a phone number in +E164 format (e.g. `+16508221060`)","type":"string"},"contactDisplayName":{"description":"The display name of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"contactId":{"description":"The ID of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"conversationId":{"description":"The Spoke ID of the conversation","type":"string"},"messageContent":{"$ref":"#/components/schemas/MessageContent"},"vendorConversationId":{"description":"The vendor's identifier for the conversation","type":"string"}},"required":["channel","companyAddress","contactAddress","conversationId","messageContent","vendorConversationId"],"type":"object"},"InboundWhatsAppConversationsDataActionRequestPayload":{"additionalProperties":false,"properties":{"channel":{"const":"whatsApp","description":"The channel of the inbound conversation.\n\nThe value for this field will always be `whatsApp`, signifying that the conversation was originated by an inbound WhatsApp message from a single contact\naddress to a company address","type":"string"},"companyAddress":{"description":"The company number that the conversation was routed to. This will be one of the numbers defined in the Spoke Phone Number settings page.\n\nThe value for this field will always be a WhatsApp address (e.g. `whatsapp:+16508221060`)","type":"string"},"contactAddress":{"description":"The address of the external party that originated the conversation.\n\nThe value for this field will always be a WhatsApp address (e.g. `whatsapp:+16508221060`)","type":"string"},"contactDisplayName":{"description":"The display name of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"contactId":{"description":"The ID of the phonebook contact (if any) associated with the external party on the call.","type":"string"},"conversationId":{"description":"The Spoke ID of the conversation","type":"string"},"messageContent":{"$ref":"#/components/schemas/MessageContent"},"vendorConversationId":{"description":"The vendor's identifier for the conversation","type":"string"}},"required":["channel","companyAddress","contactAddress","conversationId","messageContent","vendorConversationId"],"type":"object"},"InsightCard":{"additionalProperties":false,"properties":{"banner":{"anyOf":[{"$ref":"#/components/schemas/InsightCardBanner"},{"nullable":true}],"description":"Banner that will be displayed directly under the title.\n\nNo banner will be displayed if either:\n\n- `banner` is null or missing\n- `banner.text` is null or missing"},"body":{"description":"String containing Markdown that will be displayed as the main body of the Insights Card. Only\n[Basic Markdown Syntax](https://www.markdownguide.org/basic-syntax/) is supported in the `body` field.\n\n**Note**: Due to potential security concerns, HTML in Markdown is not supported.\n\nNo main body will be displayed if `body` is null or missing.","nullable":true,"type":"string"},"button":{"anyOf":[{"$ref":"#/components/schemas/InsightCardButton"},{"nullable":true}],"description":"Button serving as a link to provided URL that will be displayed at the bottom of the Insights Card.\n\nNo button will be displayed if:\n\n- `button` is null or missing\n- either `button.url` or `button.text` are null or missing"},"state":{"anyOf":[{"enum":["collapsed","expanded"],"type":"string"},{"nullable":true}],"description":"Initial expansion state of the Insights Card.\n\nPossible values:\n\n- `expanded`\n- `collapsed`\n\nIf provided `state` is either `expanded` or `collapsed`, then the user can toggle the card's expansion state.\n\nIf `state` is null or not provided, the card will show as expanded and cannot be collapsed."},"thumbnail":{"anyOf":[{"$ref":"#/components/schemas/InsightCardThumbnail"},{"nullable":true}],"description":"Thumbnail that will be shown next to the title.\n\nNo thumbnail will be displayed if:\n\n- `thumbnail` is null or missing\n- both `thumbnail.icon_name` and `thumbnail.color` are null or missing"},"title":{"description":"Title of the Insights Card.","type":"string"}},"required":["title"],"type":"object"},"InsightCardBanner":{"additionalProperties":false,"properties":{"text":{"description":"Text that will be displayed inside the banner.","type":"string"},"type":{"anyOf":[{"enum":["error","info","warning"],"type":"string"},{"nullable":true}],"description":"Type of banner to display.\n\nPossible values:\n\n- `info`\n- `warning`\n- `error`\n\nIf `type` is null or not provided, an info banner type will be displayed by default."}},"required":["text"],"type":"object"},"InsightCardBannerTypeEnum":{"enum":["error","info","warning"],"type":"string"},"InsightCardButton":{"additionalProperties":false,"properties":{"text":{"description":"Text that will be displayed inside the button.","type":"string"},"url":{"description":"URL of the web page that will be opened when the user presses the button.","type":"string"}},"required":["text","url"],"type":"object"},"InsightCardStateEnum":{"enum":["collapsed","expanded"],"type":"string"},"InsightCardThumbnail":{"additionalProperties":false,"properties":{"color":{"description":"Background color of the icon in hex code format (e.g. `#FFFFFF`).\n\nIf `color` is null or not provided, the icon will have a black background color by default.","nullable":true,"type":"string"},"icon_name":{"description":"Name of the icon.\n\nPossible values are icon names specified in [Google's Material Icons reference](https://fonts.google.com/icons?icon.set=Material+Icons)\n(e.g. `do_not_disturb` or `search`).\n\nIf `icon_name` is null or not provided, a circle with provided `color` will be displayed.","nullable":true,"type":"string"}},"type":"object"},"InsightCardsPreferences":{"additionalProperties":false,"description":"Preferences for Insights Cards.","properties":{"enlighten":{"$ref":"#/components/schemas/EnlightenInsightCardPreferences"}},"type":"object"},"InsightContext":{"additionalProperties":false,"properties":{"body":{"description":"String containing Markdown that will be displayed as the main body of the Insights Summary. Only\n[Basic Markdown Syntax](https://www.markdownguide.org/basic-syntax/) is supported in the `body` field.\nMaximum 500 characters are allowed. Extra characters will be truncated.\n\n**Note**: Due to potential security concerns, HTML in Markdown is not supported.","type":"string"},"footer":{"description":"Plain text used to display content in footer banner of the Insights Summary.\nMaximum 100 characters are allowed. Extra characters will be truncated.\n\nNo footer banner will be displayed if `footer` is null or missing.","nullable":true,"type":"string"},"metric1":{"anyOf":[{"$ref":"#/components/schemas/InsightContextMetric"},{"nullable":true}],"description":"First metric box of the Insights Summary that will be displayed above the main body of the Insights Summary.\n\nNo metric box will be displayed if both `metric1` and `metric2` are null or missing."},"metric2":{"anyOf":[{"$ref":"#/components/schemas/InsightContextMetric"},{"nullable":true}],"description":"Second metric box of the Insights Summary that will be displayed above the main body of the Insights Summary.\n\nNo metric box will be displayed if both `metric1` and `metric2` are null or missing."}},"required":["body"],"type":"object"},"InsightContextMetric":{"additionalProperties":false,"properties":{"label":{"description":"Label that will be shown directly below the metric value. Maximum 25 characters are allowed. Extra characters will be truncated.\n\nNo label will be displayed if `label` is null or missing.","nullable":true,"type":"string"},"textColor":{"description":"Color of the metric value in hex code format (e.g. `#FFFFFF`).\n\nIf `textColor` is null or not provided, the default value of `#000000` (black) will be used to display the metric value.","nullable":true,"type":"string"},"value":{"description":"Value of the metric. Maximum 5 characters are allowed. Extra characters will be truncated.","type":"string"}},"required":["value"],"type":"object"},"InsightContextPreferences":{"additionalProperties":false,"description":"Preferences for the Insights Context.","properties":{"preferredSource":{"description":"The preferred source for the Insights context. If no data is available, fallback to the default.\n\nPossible values:\n- `dataAction`: Use the `context` from the response\n- `enlighten`: Use the Enlighten AI summary when it's available\n\nDefaults to `dataAction`.","enum":["dataAction","enlighten"],"type":"string"}},"type":"object"},"InsightContextSource":{"enum":["dataAction","enlighten"],"type":"string"},"InsightDataActionRequestOriginEnum":{"description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.precall`\n- `spoke.call`\n- `spoke.callhistory`\n- `spoke.contactlookup`\n- `spoke.conversation`\n- `speedy.call`","enum":["speedy.call","spoke.call","spoke.callhistory","spoke.contactlookup","spoke.conversation","spoke.precall"],"type":"string"},"InsightDataActionResponse":{"additionalProperties":false,"properties":{"cards":{"anyOf":[{"items":{"$ref":"#/components/schemas/InsightCard"},"type":"array"},{"nullable":true}],"description":"Insights Cards that will be displayed below the Insights Summary\n\nNo Insights Cards will be displayed if `cards` is null, missing or empty."},"context":{"anyOf":[{"$ref":"#/components/schemas/InsightContext"},{"nullable":true}],"description":"Insights Summary that will be displayed above the Insights Cards\n\nNo Insights Summary will be displayed if `context` is null or missing."},"preferences":{"anyOf":[{"$ref":"#/components/schemas/InsightPreferences"},{"nullable":true}],"description":"Preferences for the Insights response."}},"type":"object"},"InsightPreferences":{"additionalProperties":false,"properties":{"cards":{"$ref":"#/components/schemas/InsightCardsPreferences"},"context":{"$ref":"#/components/schemas/InsightContextPreferences"}},"type":"object"},"InsightRequestParameters":{"anyOf":[{"$ref":"#/components/schemas/CallInsightRequestParameters"},{"$ref":"#/components/schemas/ConversationInsightRequestParameters"},{"$ref":"#/components/schemas/ExternalContactInsightRequestParameters"},{"$ref":"#/components/schemas/InternalContactInsightRequestParameters"}]},"InternalContactInsightRequestParameters":{"additionalProperties":false,"properties":{"contactEmail":{"description":"The email address of the Spoke user for which to request Insights data.","nullable":true,"type":"string"},"contactId":{"description":"The id of the Spoke user for which to request Insights data.","type":"string"},"isInternal":{"const":true,"description":"Indicates whether the contact being looked up is an internal Spoke user.\n\nThis field will be true when looking up a Spoke user.","type":"boolean"},"requestOrigin":{"const":"spoke.contactlookup","description":"A concatenation of which Spoke app and where in the app the data is being requested.\n\nPossible values:\n\n- `spoke.contactlookup`: Denotes Contact Insights being requested from the Spoke Phone app","type":"string"},"userEmail":{"description":"Email of the user that is requesting Insights.","type":"string"}},"required":["contactId","isInternal","requestOrigin","userEmail"],"type":"object"},"InternalContactSharedEventDetail":{"additionalProperties":false,"properties":{"action":{"$ref":"#/components/schemas/ContactSharedAction"},"contact":{"anyOf":[{"$ref":"#/components/schemas/NewContactShared"},{"$ref":"#/components/schemas/UpdatedContactShared"}]},"context":{"$ref":"#/components/schemas/SharedContactInternalContext"},"organisationId":{"type":"string"},"sharedByUserId":{"type":"string"}},"required":["action","contact","context","organisationId","sharedByUserId"],"type":"object"},"InternalConversation":{"additionalProperties":false,"properties":{"assignedContact":{"description":"The phonebook contact (if any) associated with the external party on the conversation.\n\nThe value of this field will always be `null` for internal conversations.","nullable":true},"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"channel":{"description":"The type of the conversation channel.\n\nThe value for this field will always be `null`, signifying that the conversation is an internal conversation between Spoke users.","nullable":true},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.\n\nThe value of this field will always be `null` for internal conversations.","nullable":true},"companyNumberOwner":{"description":"The entry in the Spoke directory that the `companyNumber` is assigned to.\n\nThe value of this field will always be `null` for internal conversations.","nullable":true},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"const":true,"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `true` for internal conversations.\n\nThis field is provided to simplify integration with CRM platforms. As there is no 'customer' or external\nparty involved in the conversation, these conversations can be excluded from CRM conversation logs.","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nFor internal conversations, this list will only contain Spoke user participants.","items":{"$ref":"#/components/schemas/ConversationParticipant.User"},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["channel","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"InternalEventData":{"anyOf":[{"$ref":"#/components/schemas/TranscriptCreateEventData"},{"$ref":"#/components/schemas/PhoneNumberConfigureEventData"},{"$ref":"#/components/schemas/ConversationCloseEventData"},{"$ref":"#/components/schemas/ConversationCloseOrLeaveEventData"},{"$ref":"#/components/schemas/ConversationCreateOrJoinEventData"},{"$ref":"#/components/schemas/ConversationAddParticipantEventData"},{"$ref":"#/components/schemas/ConversationRemoveParticipantEventData"},{"$ref":"#/components/schemas/ConversationUpdateEventData"},{"$ref":"#/components/schemas/ConversationGetEventData"},{"$ref":"#/components/schemas/ConversationSendMessageEventData"},{"$ref":"#/components/schemas/ConversationClaimEventData"},{"$ref":"#/components/schemas/ConversationAssignContactEventData"},{"$ref":"#/components/schemas/ConversationGetMessageEventData"},{"$ref":"#/components/schemas/UserConversationGetEventData"},{"$ref":"#/components/schemas/UserConversationGetAssociatedContactsEventData"},{"$ref":"#/components/schemas/UserConversationGetAssignableContactsEventData"},{"$ref":"#/components/schemas/UserConversationUpdateEventData"},{"$ref":"#/components/schemas/ConversationContentListTemplatesEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountCreateEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountAutoConfirmEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountCredentialsEventData"},{"$ref":"#/components/schemas/WebhookRefreshSigningSecretEventData"},{"$ref":"#/components/schemas/CallRecordingDeleteEventData"},{"$ref":"#/components/schemas/CallRecordingBatchUpdateAutoExpiryEventData"},{"$ref":"#/components/schemas/UserSessionStartedEventData"},{"$ref":"#/components/schemas/UserSessionExpiredEventData"},{"$ref":"#/components/schemas/MemberLicenseEnabledEventData"},{"$ref":"#/components/schemas/MemberLicenseDisabledEventData"},{"$ref":"#/components/schemas/ConfigModifiedEventData"},{"$ref":"#/components/schemas/TeamMembersAddedEventData"},{"$ref":"#/components/schemas/TeamMembersRemovedEventData"},{"$ref":"#/components/schemas/TeamDeletedEventData"},{"$ref":"#/components/schemas/UserAvailabilitySetEventData"},{"$ref":"#/components/schemas/UserAvailabilityUnsetOnCallEventData"},{"$ref":"#/components/schemas/UserAvailabilityRuleUpsertEventData"},{"$ref":"#/components/schemas/UserAvailabilityRuleGetEventData"}]},"InternalEventResult":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataType"},"error":{"type":"string"},"success":{"type":"boolean"}},"required":["success"],"type":"object"},"InternalEventType":{"enum":["callRecording.batchUpdateAutoExpiry","callRecording.delete","callRecordingTranscription.checkCompleted","callRecordingTranscription.requested","callRecordingTranscription.skipped","config.modified","conversation.addParticipant","conversation.assignContact","conversation.claim","conversation.close","conversation.closeOrLeave","conversation.createOrJoin","conversation.get","conversation.getMessage","conversation.removeParticipant","conversation.sendMessage","conversation.update","conversationContentTemplate.list","directorySync.cleanup","directorySync.configure","directorySync.remove","directorySync.updateConfiguration","extension.changed","member.created","member.deleted","member.licenseDisabled","member.licenseEnabled","member.updated","notification.batchSend","organisation.created","organisation.deleted","organisation.updated","phoneNumber.assigned","phoneNumber.configure","phoneNumber.created","phoneNumber.deleted","provisioning.validateAccount.autoConfirm","provisioning.validateAccount.create","provisioning.validateAccount.credentials","team.deleted","team.membersAdded","team.membersRemoved","transcript.create","transcription.failed","userAvailability.set","userAvailability.unsetOnCall","userAvailabilityRule.get","userAvailabilityRule.upsert","userConversation.get","userConversation.getAssignableContacts","userConversation.getAssociatedContacts","userConversation.update","userSession.expired","userSession.started","vendorAccount.linked","webhook.refreshSigningSecret"],"type":"string"},"InternalServiceEvent":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataType_1"},"organisationId":{"type":"string"},"type":{"$ref":"#/components/schemas/InternalServiceEventType"}},"required":["data","organisationId","type"],"type":"object"},"InternalServiceEventBridgeEvent":{"additionalProperties":false,"properties":{"account":{"type":"string"},"detail":{"$ref":"#/components/schemas/InternalServiceEventDetail"},"detail-type":{"$ref":"#/components/schemas/EventBridgeEvent.TDetailType"},"id":{"type":"string"},"region":{"type":"string"},"replay-name":{"type":"string"},"resources":{"items":{"type":"string"},"type":"array"},"source":{"type":"string"},"time":{"type":"string"},"version":{"type":"string"}},"required":["account","detail","detail-type","id","region","resources","source","time","version"],"type":"object"},"InternalServiceEventDataType":{"anyOf":[{"$ref":"#/components/schemas/Base64ZlibCompressedData"},{"$ref":"#/components/schemas/CallEventData"},{"$ref":"#/components/schemas/EventData"},{"$ref":"#/components/schemas/CallHighlightEventData"},{"$ref":"#/components/schemas/CallNoteEventData"},{"$ref":"#/components/schemas/CallRecordingEventData"},{"$ref":"#/components/schemas/CallVoicemailEventData"},{"$ref":"#/components/schemas/CallFormEventData"},{"$ref":"#/components/schemas/CallTranscriptEventData"},{"$ref":"#/components/schemas/ContentAnalysisEventData"},{"$ref":"#/components/schemas/ConversationEventData"},{"$ref":"#/components/schemas/TeamEventData"},{"$ref":"#/components/schemas/TranscriptEventData"},{"$ref":"#/components/schemas/TranscriptCreateEventData"},{"$ref":"#/components/schemas/UserEventData"},{"$ref":"#/components/schemas/ContactSharedWithAddActionEventData"},{"$ref":"#/components/schemas/ContactSharedWithUpdateActionEventData"},{"$ref":"#/components/schemas/PhoneNumberConfigureEventData"},{"$ref":"#/components/schemas/ConversationCloseEventData"},{"$ref":"#/components/schemas/ConversationCloseOrLeaveEventData"},{"$ref":"#/components/schemas/ConversationCreateOrJoinEventData"},{"$ref":"#/components/schemas/ConversationAddParticipantEventData"},{"$ref":"#/components/schemas/ConversationRemoveParticipantEventData"},{"$ref":"#/components/schemas/ConversationUpdateEventData"},{"$ref":"#/components/schemas/ConversationGetEventData"},{"$ref":"#/components/schemas/ConversationSendMessageEventData"},{"$ref":"#/components/schemas/ConversationClaimEventData"},{"$ref":"#/components/schemas/ConversationAssignContactEventData"},{"$ref":"#/components/schemas/ConversationGetMessageEventData"},{"$ref":"#/components/schemas/UserConversationGetEventData"},{"$ref":"#/components/schemas/UserConversationGetAssociatedContactsEventData"},{"$ref":"#/components/schemas/UserConversationGetAssignableContactsEventData"},{"$ref":"#/components/schemas/UserConversationUpdateEventData"},{"$ref":"#/components/schemas/ConversationContentListTemplatesEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountCreateEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountAutoConfirmEventData"},{"$ref":"#/components/schemas/ProvisioningValidateAccountCredentialsEventData"},{"$ref":"#/components/schemas/WebhookRefreshSigningSecretEventData"},{"$ref":"#/components/schemas/CallRecordingDeleteEventData"},{"$ref":"#/components/schemas/CallRecordingBatchUpdateAutoExpiryEventData"},{"$ref":"#/components/schemas/UserSessionStartedEventData"},{"$ref":"#/components/schemas/UserSessionExpiredEventData"},{"$ref":"#/components/schemas/MemberLicenseEnabledEventData"},{"$ref":"#/components/schemas/MemberLicenseDisabledEventData"},{"$ref":"#/components/schemas/ConfigModifiedEventData"},{"$ref":"#/components/schemas/TeamMembersAddedEventData"},{"$ref":"#/components/schemas/TeamMembersRemovedEventData"},{"$ref":"#/components/schemas/TeamDeletedEventData"},{"$ref":"#/components/schemas/UserAvailabilitySetEventData"},{"$ref":"#/components/schemas/UserAvailabilityUnsetOnCallEventData"},{"$ref":"#/components/schemas/UserAvailabilityRuleUpsertEventData"},{"$ref":"#/components/schemas/UserAvailabilityRuleGetEventData"}]},"InternalServiceEventDetail":{"anyOf":[{"$ref":"#/components/schemas/TranscriptCreatedEventDetail"},{"$ref":"#/components/schemas/CallTranscriptionCompletedEventDetail"},{"$ref":"#/components/schemas/CallRecordingTranscriptionCheckCompletedEventDetail"},{"$ref":"#/components/schemas/InternalContactSharedEventDetail"},{"$ref":"#/components/schemas/NotificationBatchSendEventDetail"}]},"InternalServiceEventHandler":{"additionalProperties":false,"type":"object"},"InternalServiceEventType":{"enum":["call.answered","call.contact_assigned","call.contact_assigned_with_add","call.contact_assigned_with_update","call.ended","call.form.started","call.form.submitted","call.highlight.created","call.highlight.recording_available","call.hungup","call.not_answered","call.note.created","call.recording.available","call.started","call.tariffed","call.transcript.created","call.transcription_completed","call.voicemail.available","callRecording.batchUpdateAutoExpiry","callRecording.delete","callRecordingTranscription.checkCompleted","callRecordingTranscription.requested","callRecordingTranscription.skipped","config.modified","contact.shared","content_analysis.completed","conversation.addParticipant","conversation.assignContact","conversation.claim","conversation.close","conversation.closeOrLeave","conversation.closed","conversation.contact_assigned","conversation.createOrJoin","conversation.get","conversation.getMessage","conversation.inactive","conversation.message.created","conversation.removeParticipant","conversation.sendMessage","conversation.update","conversationContentTemplate.list","directorySync.cleanup","directorySync.configure","directorySync.remove","directorySync.updateConfiguration","extension.changed","member.created","member.deleted","member.licenseDisabled","member.licenseEnabled","member.updated","notification.batchSend","organisation.created","organisation.deleted","organisation.updated","phoneNumber.assigned","phoneNumber.configure","phoneNumber.created","phoneNumber.deleted","provisioning.validateAccount.autoConfirm","provisioning.validateAccount.create","provisioning.validateAccount.credentials","team.availability.updated","team.deleted","team.membersAdded","team.membersRemoved","transcript.create","transcript.created","transcription.failed","user.availability.updated","userAvailability.set","userAvailability.unsetOnCall","userAvailabilityRule.get","userAvailabilityRule.upsert","userConversation.get","userConversation.getAssignableContacts","userConversation.getAssociatedContacts","userConversation.update","userSession.expired","userSession.started","vendorAccount.linked","webhook.refreshSigningSecret"],"type":"string"},"LicenseName":{"enum":["callHub10Pack","callHub20Pack","callHub5Pack","enlightenEssentials","enlightenPro","essentials","proCx"],"type":"string"},"LoginStatus":{"enum":["loggedIn","loggedOut"],"type":"string"},"ManagerUserDirectoryEntry":{"additionalProperties":false,"description":"The entry in the Spoke directory for the manager assigned to the user.\n\nThis field identifies the entry for the manager in the Spoke directory. The directory entry for the manager will always have a type of `user`.\n\nThis field will be null if a manager has not been assigned to the user.","properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"The email address of the entry.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory.","type":"string"}},"required":["displayName","id"],"type":"object"},"MemberLicenseDisabledEventData":{"additionalProperties":false,"properties":{"memberId":{"type":"string"},"userId":{"type":"string"}},"required":["memberId","userId"],"type":"object"},"MemberLicenseEnabledEventData":{"additionalProperties":false,"properties":{"memberId":{"type":"string"},"userId":{"type":"string"}},"required":["memberId","userId"],"type":"object"},"Message":{"additionalProperties":false,"properties":{"assignedContact":{"$ref":"#/components/schemas/MessageAssignedContact"},"author":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"},{"nullable":true}],"description":"The author of the message.\n\nThis field identifies the Spoke user participant or external contact participant that created the message.\n\nThis field will be null when the message is an auto-response message (where `isAutoResponse` is true)."},"body":{"description":"Message content","type":"string"},"conversationId":{"description":"The Conversation ID that message belongs to","type":"string"},"direction":{"$ref":"#/components/schemas/MessageDirection"},"id":{"description":"The id of the message","type":"string"},"isApiCreated":{"description":"Indicates whether the message was created by a call to the Spoke API.","type":"boolean"},"isAutoResponse":{"description":"Indicates whether the message is an auto-response message sent by the system.","type":"boolean"},"media":{"description":"If the message contains media, this field contains details of the media object(s).","items":{"$ref":"#/components/schemas/MessageMedia"},"type":"array"},"sentAt":{"description":"Date/Time (UTC - ISO8601 format) that the message was originally send.","type":"string"},"sentAtTimestamp":{"description":"Unix timestamp that the message was originally send.","type":"number"},"user":{"$ref":"#/components/schemas/MessageUser"},"vendorMessageId":{"description":"The vendor's identifier for the message. The value of this field is dependent\non the value of the `vendor` field in the parent conversation:\n\n* `twilio`: the `MessageSid` of the message","type":"string"}},"required":["body","conversationId","direction","id","isApiCreated","isAutoResponse","sentAt","sentAtTimestamp","vendorMessageId"],"type":"object"},"MessageAssignedContact":{"additionalProperties":false,"description":"The phonebook contact (if any) associated with the external party on the message.","properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookManagedBy":{"description":"Specifies whether the phonebook is managed by the phonebook owner or by the organisation via the Spoke API.\n\nPossible values:\n* `organisation`: Contacts in the phonebook can only be managed by the organisation administrators via the Spoke API. For a personal phonebook, the owner of\nthe phonebook will have read access to contacts but cannot update or delete any contacts.\n* `user`: For phonebooks owned by a user only. Contacts in the phonebook can only be managed by the owner of the phonebook. Contacts will not be accessible\nvia the Spoke API for Read, Update or Delete operations.\n\nWhen accessed via the Spoke API, this value will always be `organisation`.","enum":["organisation","user"],"type":"string"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"}},"type":"object"},"MessageContent":{"additionalProperties":false,"description":"The content of the message","properties":{"body":{"description":"The content of the message, can be up to 1,600 characters long.","type":"string"},"media":{"description":"If the message contains media, contains details of the media object(s).","items":{"$ref":"#/components/schemas/MessageContentMedia"},"type":"array"}},"type":"object"},"MessageContentMedia":{"additionalProperties":false,"properties":{"fileSize":{"description":"The size of the media file in bytes.","type":"number"},"mimeType":{"description":"The MIME type of the media file.","type":"string"},"tempUrl":{"description":"The temporary URL of the media file.\n\nThis media URL includes a timestamped signature that expires after 300 seconds.","type":"string"}},"required":["fileSize","mimeType","tempUrl"],"type":"object"},"MessageDirection":{"description":"Message direction. One of the following values:\n- inbound: An incoming message to Spoke Phone from an external number\n- outbound: An outgoing message from Spoke Phone to another number","enum":["inbound","outbound"],"type":"string"},"MessageMedia":{"additionalProperties":false,"properties":{"fileName":{"description":"The name of the media file","type":"string"},"fileSize":{"description":"The size of the media file in bytes","type":"number"},"mimeType":{"description":"The MIME type of the media file","type":"string"},"vendorResourceUrl":{"description":"The vendor's resource URL for the media. Only populated for BYOT customers.\n\nThe value of this field is dependent on the value of the conversation's `vendor` field\n\n* `twilio`: the [Conversation Media Resource](https://www.twilio.com/docs/conversations/api/media-resource) URL of the media","type":"string"}},"required":["fileName","fileSize","mimeType"],"type":"object"},"MessageRoutingAction":{"description":"Defines whether to assign users to the conversation that is created as a result of the message.\n\nPossible values:\n* `assign_users`: Assign the conversation to one or more Spoke users.  If this value is used, the assignUsers parameter must be non-empty\n\n* `do_not_route`: Do not assign any Spoke users to the conversation.  If the customer replies, no one will be able to respond to the customer\n\n* `assign_owner`: Assign the conversation to the owner of the company address.  Currently supports team and member owners only.","enum":["assign_owner","assign_users","do_not_route"],"type":"string"},"MessageUser":{"additionalProperties":false,"description":"The user associated with the message.\n - For conversations where isInternal = `false` this is the user who sent or received the message.\n - For conversations where isInternal = `true` this is the user who created the message.","properties":{"email":{"description":"User's email address (as registered in Spoke)","nullable":true,"type":"string"},"firstName":{"description":"User's first name","nullable":true,"type":"string"},"jobTitle":{"description":"User's job title (as registered in Spoke)","nullable":true,"type":"string"},"lastName":{"description":"User's last name","nullable":true,"type":"string"},"location":{"description":"User’s location (as registered in Spoke)","nullable":true,"type":"string"},"manager":{"anyOf":[{"$ref":"#/components/schemas/ManagerUserDirectoryEntry"},{"nullable":true}]},"mobile":{"description":"User's mobile number (as registered in Spoke)\n\nThis will be omitted if the organisation is configured to exclude mobile numbers from API responses","nullable":true,"type":"string"},"userId":{"description":"The id of the user","type":"string"}},"required":["userId"],"type":"object"},"MissedCallReason":{"enum":["noOneAvailable","noOnePickedUp","outsideBusinessHours"],"type":"string"},"NewContactShared":{"additionalProperties":false,"description":"The details of the new contact that was shared by the user.","properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"}},"required":["firstName","phoneNumbers"],"type":"object"},"Note":{"additionalProperties":false,"properties":{"createdAt":{"description":"Date/Time (UTC - ISO8601 format) that the note was originally created.","type":"string"},"createdByUser":{"$ref":"#/components/schemas/User"},"createdTimestamp":{"description":"Unix timestamp that the note was originally created.","type":"number"},"id":{"description":"The id of the note.","type":"string"},"locale":{"description":"The ISO language and country code (e.g. en-NZ) used by the transcription engine for transcribing\nthe note contents.","type":"string"},"noteContents":{"description":"A list of individual note content items.\n\nA NoteContent object represents an individually transcribed item within a Note. It is possible\nfor a user to edit the content field prior to saving the note, in which case the edited flag\nwill be set to true, and the transcriptionConfidence value will be set to 1.\n\nAs a general rule of thumb, transcriptionConfidence values > 0.93 will have good quality transcription\nand need little editing.","items":{"$ref":"#/components/schemas/NoteContent"},"type":"array"},"noteText":{"description":"Note text.  This is a calculated field and is created by concatenating the content fields\nfrom individual NoteContent items, separated by \\n\\n","type":"string"}},"required":["createdAt","createdByUser","createdTimestamp","id","locale","noteContents","noteText"],"type":"object"},"NoteContent":{"additionalProperties":false,"properties":{"content":{"description":"The transcribed (and possibly edited) note content.","type":"string"},"edited":{"$ref":"#/components/schemas/Boolean"},"transcribedAt":{"description":"Date/Time (UTC - ISO8601 format) that the note content was originally transcribed.","type":"string"},"transcribedTimestamp":{"description":"Unix timestamp that the note content was originally transcribed.","type":"number"},"transcriptionConfidence":{"description":"Value between 0 and 1 representing the transcription engine's confidence of the accuracy of the\ntranscription.\n\nIf the edited flag is true, then this value will be 1.","type":"number"}},"required":["content","edited","transcribedAt","transcribedTimestamp"],"type":"object"},"NoteTypeEnum":{"enum":["general","important"],"type":"string"},"NotificationBatchSendEventDetail":{"additionalProperties":false,"properties":{"notifications":{"items":{"$ref":"#/components/schemas/SendNotificationPayload"},"type":"array"},"organisationId":{"type":"string"}},"required":["notifications","organisationId"],"type":"object"},"NotificationCategories":{"enum":["ACCEPT_CALL_FAIL_CATEGORY","ACCEPT_CALL_SUCCESS_CATEGORY","ACCEPT_DECLINE_CALL_CATEGORY","MISSED_CALL_CATEGORY","MISSED_CALL_REVOKE_CATEGORY","MISSED_CONFERENCE_CALL_CATEGORY","NEW_CONVERSATION_MESSAGE_CATEGORY","VOICEMAIL_CATEGORY"],"type":"string"},"NotificationChannel":{"enum":["pushNotification","websocket"],"type":"string"},"NotificationMessage":{"anyOf":[{"$ref":"#/components/schemas/BackgroundNotificationMessage"},{"$ref":"#/components/schemas/AlertNotificationMessage"}]},"NotificationMode":{"description":"Controls notification and unread indicators for API-delivered messages.\n\nDefaults to `notify_unread`.\n\nValues:\n\n* `notify_unread`: Sends a system notification and keeps the message unread.\nUse for messages that need immediate attention.\n\n* `silent_unread`: Suppresses system notifications and keeps the message unread.\nUse for bulk messages that users can check later.\n\n* `silent_read`: Suppresses system notifications and marks the message as read\nunless the conversation already has existing unread messages. Use for background delivery.","enum":["notify_unread","silent_read","silent_unread"],"type":"string"},"Nullable":{"anyOf":[{"$ref":"#/components/schemas/T"},{"nullable":true}]},"OptionalOnly":{"additionalProperties":false,"description":"Make the set of properties K optional in T, other properties are required\nNOTE: Intersection types create allOf types in JSON definition","properties":{},"type":"object"},"Organisation":{"additionalProperties":false,"properties":{"countryCode":{"description":"Country code of organisation","type":"string"},"organisationId":{"description":"Id of organisation","type":"string"}},"required":["countryCode","organisationId"],"type":"object"},"OrganisationPhonebookOwner":{"additionalProperties":false,"properties":{"id":{"description":"The ID of the organisation","type":"string"},"type":{"const":"organisation","description":"The owner type of the phonebook. When this value is `organisation`, the phonebook is owned by the organisation and is accessible by all users from the organisation.","type":"string"}},"required":["id","type"],"type":"object"},"OutboundCallRequestPayload":{"additionalProperties":false,"properties":{"callId":{"description":"The Spoke ID of the call.","type":"string"},"callerId":{"description":"The Caller ID or ANI that Spoke is proposing to use for placing this call.","type":"string"},"contactEmail":{"description":"The email address of the contact being called.","type":"string"},"contactId":{"description":"The ID of the contact being called.","type":"string"},"contactNumber":{"description":"The phone number being called.","type":"string"},"deviceAddress":{"description":"The SIP address of the standalone SIP device that is placing the call.","type":"string"},"deviceExtension":{"description":"The extension of the standalone SIP device that is placing the call.","type":"string"},"deviceId":{"description":"The id of the standalone SIP device that is placing the call.","type":"string"},"userEmail":{"description":"The email address of the Spoke Phone user who is placing the call.","type":"string"},"userExtension":{"description":"The extension of the Spoke Phone user who is placing the call.","type":"string"},"userId":{"description":"The id of the Spoke Phone user who is placing the call.","type":"string"},"vendorCallId":{"description":"The vendor's identifier for the call.","type":"string"}},"required":["callerId","contactNumber","vendorCallId"],"type":"object"},"OutboundCallResponsePayload":{"additionalProperties":false,"properties":{"callerId":{"description":"Returning this parameter will override the Caller ID that Spoke (or the user) has selected. The value must be in a valid E164 format and be a verified\ncaller ID in the account.","type":"string"},"dialPermission":{"description":"Outbound Dial permission.  Return either of the following values:\n - `blocked`: Prevents the call from taking place. The call status will show as `Blocked` in call history.\n - `allowed`: Allow the call to be made. This is the default value for this parameter if it is not included in the response payload. For SIP devices, the\n   value needs to be explicitly set to override the \"Outbound calls allowed\" flag set against the SIP device.","enum":["allowed","blocked"],"type":"string"},"passthroughParameters":{"$ref":"#/components/schemas/CallPassthroughParametersResponse"}},"type":"object"},"OutgoingApiRequest.Header":{"enum":["Accept","Content-Length","Content-Type","User-Agent","x-spoke-organisation-id","x-spoke-signature","x-spoke-timestamp"],"type":"string"},"OutgoingApiRequest.UserAgent":{"const":"spokephone","type":"string"},"OverrideCallGroupOfferConfig":{"additionalProperties":false,"description":"Configuration that overrides how the call will be offered to the team.","properties":{"nextOfferTimeout":{"description":"Number of seconds to wait before offering the call to the next available user(s).\n\nThe supported range of values for `nextOfferTimeout` is from 5 to 60 seconds.\nIf the provided value falls outside the range, it will be rounded to the nearest supported value.","type":"number"},"timeout":{"description":"Number of seconds to wait for someone to answer the call.\n\nThe supported range of values for `timeout` is from 10 to 300 seconds.\nIf the provided value falls outside the range, it will be rounded to the nearest supported value.","type":"number"},"users":{"$ref":"#/components/schemas/OverrideCallGroupUsers"}},"type":"object"},"OverrideCallGroupUsers":{"additionalProperties":false,"description":"Lists of users the call will be offered to.\n\nEach user is identified by their email address in Spoke. Invalid emails are ignored.\nAvailability rules still apply - only available users will be offered the call.\n\nIf the team call's offer pattern is set to Round-robin, the call will be offered to the users in the order in which they appear in the list.","properties":{"group1":{"description":"List of user emails the call will be offered to first. This is equivalent to users who have the `Call First` flag enabled in the team call configuration in\nthe Spoke account portal.","items":{"type":"string"},"type":"array"},"group2":{"description":"List of user emails the call will be offered to when no one in the first group is available, or no one in the first group answers the call.","items":{"type":"string"},"type":"array"}},"required":["group1","group2"],"type":"object"},"PaginatedResponse":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["meta"],"type":"object"},"Paging":{"additionalProperties":false,"properties":{"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"}},"type":"object"},"Participant":{"anyOf":[{"$ref":"#/components/schemas/UserParticipant"},{"$ref":"#/components/schemas/ContactParticipant"}]},"ParticipantClaimedConversationEvent":{"additionalProperties":false,"properties":{"eventType":{"const":"claimed_conversation","type":"string"},"participant":{"$ref":"#/components/schemas/Participant"},"timestamp":{"description":"Unix timestamp that this participant event occurred.","type":"number"}},"required":["eventType","participant","timestamp"],"type":"object"},"ParticipantEvent":{"anyOf":[{"$ref":"#/components/schemas/ParticipantJoinedEvent"},{"$ref":"#/components/schemas/ParticipantLeftEvent"},{"$ref":"#/components/schemas/ParticipantClaimedConversationEvent"}]},"ParticipantEventType":{"description":"Participant event type. One of the following values:\n- left: A participant left the conversation.\n- joined: A participant joined the conversation.\n- claimed_conversation: A participant claimed the conversation.","enum":["claimed_conversation","joined","left"],"type":"string"},"ParticipantJoinedEvent":{"additionalProperties":false,"properties":{"addedBy":{"$ref":"#/components/schemas/ParticipantModifiedBy"},"eventType":{"const":"joined","type":"string"},"participant":{"$ref":"#/components/schemas/Participant"},"timestamp":{"description":"Unix timestamp that this participant event occurred.","type":"number"}},"required":["addedBy","eventType","participant","timestamp"],"type":"object"},"ParticipantLeftEvent":{"additionalProperties":false,"properties":{"eventType":{"const":"left","type":"string"},"participant":{"$ref":"#/components/schemas/Participant"},"removedBy":{"$ref":"#/components/schemas/ParticipantModifiedBy"},"timestamp":{"description":"Unix timestamp that this participant event occurred.","type":"number"}},"required":["eventType","participant","removedBy","timestamp"],"type":"object"},"ParticipantModifiedBy":{"additionalProperties":false,"properties":{"id":{"description":"The id value is determined by the type.\nFor user type it's the user's memberId.\nFor system type it's the systemId.\nFor dataAction type it's the corresponding dataActionRequestId.","type":"string"},"type":{"$ref":"#/components/schemas/ParticipantModifiedByType"}},"required":["id","type"],"type":"object"},"ParticipantModifiedByType":{"description":"The type of the entity that modified the participant. One of the following values:\n- user: When the participant is modified by a Spoke Phone user. This may be the same user who is modified.\n- system: When the participant is modified by the Spoke Phone system.\n- dataAction: When the participant is modified by a Data Action request.","enum":["dataAction","system","user"],"type":"string"},"ParticipantType":{"description":"Participant type. One of the following values:\n- user: A Spoke Phone user.\n- contact: An external contact or an external number.","enum":["contact","user"],"type":"string"},"PhoneNumber":{"additionalProperties":false,"properties":{"label":{"description":"Number label e.g. work, home","type":"string"},"numberDisplay":{"description":"Formatted for display or what the user provided","type":"string"},"numberE164":{"description":"Formatted as E164 number if the number is valid","nullable":true,"type":"string"},"numberRaw":{"description":"The number provided with all white spaces removed for searchability","type":"string"}},"required":["label","numberDisplay","numberRaw"],"type":"object"},"PhoneNumberChannelAction":{"enum":["disable","enable"],"type":"string"},"PhoneNumberConfigureEventData":{"additionalProperties":false,"properties":{"channels":{"additionalProperties":false,"properties":{"whatsApp":{"enum":["disable","enable"],"type":"string"}},"type":"object"},"numberE164":{"type":"string"}},"required":["channels","numberE164"],"type":"object"},"PhonebookContact":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"},"type":{"const":"contact","type":"string"}},"required":["id","phoneNumbers","phonebookId","type"],"type":"object"},"PhonebookContactDirectoryEntry":{"additionalProperties":false,"properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookManagedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"},"phonebookOwner":{"$ref":"#/components/schemas/RequireOnly_PhonebookOwner_id_"},"type":{"const":"contact","type":"string"}},"required":["id","phoneNumbers","phonebookId","phonebookManagedBy","phonebookOwner","type"],"type":"object"},"PhonebookManagedBy":{"description":"Specifies whether the phonebook is managed by the phonebook owner or by the organisation via the Spoke API.\n\nPossible values:\n* `organisation`: Contacts in the phonebook can only be managed by the organisation administrators via the Spoke API. For a personal phonebook, the owner of the phonebook will have read access to contacts but cannot update or delete any contacts.\n* `user`: For phonebooks owned by a user only. Contacts in the phonebook can only be managed by the owner of the phonebook. Contacts will not be accessible via the Spoke API for Read, Update or Delete operations.\n\nWhen accessed via the Spoke API, this value will always be `organisation`.","enum":["organisation","user"],"type":"string"},"PhonebookOwner":{"anyOf":[{"$ref":"#/components/schemas/OrganisationPhonebookOwner"},{"$ref":"#/components/schemas/UserPhonebookOwner"}]},"PhonebookOwnerType":{"description":"The owner type of the phonebook.\n\nPossible values:\n* `organisation`: The phonebook is owned by the organisation and is accessible by all users from the organisation\n* `user`: The phonebook is a personal phonebook owned by a user and is accessible only by the user","enum":["organisation","user"],"type":"string"},"PhonebookRequest":{"additionalProperties":false,"properties":{"excludeEmpty":{"description":"If this value is true, phonebooks without any contacts are excluded","type":"string"},"id":{"description":"ID of the phonebook","type":"string"},"limit":{"description":"Contacts limit query string","type":"string"},"next":{"description":"The next contact token previously returned by the API for paginating contacts","type":"string"},"search":{"description":"The contacts search term","type":"string"}},"required":["id"],"type":"object"},"PhonebooksRequest":{"additionalProperties":false,"properties":{"excludeEmpty":{"description":"If this value is true, phonebooks without any contacts are excluded","type":"string"},"limit":{"description":"Contacts limit query string","type":"string"},"search":{"description":"The contacts search term","type":"string"}},"type":"object"},"ProvisioningEvent":{"additionalProperties":false,"properties":{"eventType":{"$ref":"#/components/schemas/ProvisioningEventType"},"organisationId":{"type":"string"},"originalEvent":{"$ref":"#/components/schemas/Record_string_any_"},"timestamp":{"type":"number"},"vendor":{"type":"string"},"vendorAccountId":{"type":"string"},"vendorAccountName":{"type":"string"},"vendorAccountOwner":{"$ref":"#/components/schemas/VendorAccountOwner"},"vendorAccountUser":{"$ref":"#/components/schemas/VendorAccountUser"},"vendorInstallationId":{"type":"string"},"vendorInstallationSourceId":{"type":"string"}},"required":["eventType","originalEvent","timestamp","vendor","vendorAccountId","vendorAccountName","vendorAccountOwner","vendorAccountUser","vendorInstallationId","vendorInstallationSourceId"],"type":"object"},"ProvisioningEventType":{"enum":["activate","suspend"],"type":"string"},"ProvisioningValidateAccountAutoConfirmEventData":{"additionalProperties":false,"properties":{"email":{"type":"string"},"vendorAccountId":{"type":"string"},"vendorInstallationId":{"type":"string"}},"required":["email","vendorAccountId","vendorInstallationId"],"type":"object"},"ProvisioningValidateAccountAutoConfirmResultData":{"additionalProperties":false,"properties":{"canAutoConfirm":{"type":"boolean"},"invalidAccountReason":{"type":"string"},"isValidAccount":{"type":"boolean"},"vendorAccountId":{"type":"string"},"vendorInstallationId":{"type":"string"},"vendorInstallationSourceId":{"type":"string"}},"required":["canAutoConfirm","isValidAccount"],"type":"object"},"ProvisioningValidateAccountCreateEventData":{"additionalProperties":false,"properties":{"vendorAccountId":{"type":"string"},"vendorInstallationId":{"type":"string"}},"required":["vendorAccountId","vendorInstallationId"],"type":"object"},"ProvisioningValidateAccountCreateResultData":{"additionalProperties":false,"properties":{"invalidAccountReason":{"type":"string"},"isValidAccount":{"type":"boolean"},"vebdorAccountUser":{"$ref":"#/components/schemas/VendorAccountUser"},"vendorAccountName":{"type":"string"},"vendorAccountOwner":{"$ref":"#/components/schemas/VendorAccountOwner"}},"required":["isValidAccount"],"type":"object"},"ProvisioningValidateAccountCredentialsEventData":{"additionalProperties":false,"properties":{"authToken":{"type":"string"},"vendorAccountId":{"type":"string"},"vendorInstallationId":{"type":"string"}},"required":["authToken","vendorAccountId","vendorInstallationId"],"type":"object"},"ProvisioningValidateAccountCredentialsResultData":{"additionalProperties":false,"properties":{"invalidAccountReason":{"type":"string"},"isValidAccount":{"type":"boolean"},"isValidAuthToken":{"type":"boolean"}},"required":["isValidAccount","isValidAuthToken"],"type":"object"},"ProvisioningValidateAccountEventData":{"additionalProperties":false,"properties":{"vendorAccountId":{"type":"string"},"vendorInstallationId":{"type":"string"}},"required":["vendorAccountId","vendorInstallationId"],"type":"object"},"ProvisioningValidateAccountResultData":{"additionalProperties":false,"properties":{"invalidAccountReason":{"type":"string"},"isValidAccount":{"type":"boolean"}},"required":["isValidAccount"],"type":"object"},"RecordingChannels":{"description":"The number of channels in the recording. One of:\n* `1`: mono\n* `2`: stereo","enum":[1,2],"type":"number"},"RecordingMimeType":{"description":"The MIME type of the recording. One of:\n* `audio/mpeg`\n* `audio/wav`","enum":["audio/mpeg","audio/wav"],"type":"string"},"RequireOnly":{"additionalProperties":false,"description":"Require the set of properties K in T, other properties become optional\nNOTE: Intersection types create allOf types in JSON definition","properties":{},"type":"object"},"ResourceUsage":{"additionalProperties":false,"properties":{"resource":{"description":"The resource that was used.\n\nIn the case of LLM usage, this will be the model name used to produce the artifact.","type":"string"},"unit":{"description":"The unit of the resource usage.\n\nIn the case of LLM usage, this will be the unit of the model tokens used to produce the artifact","type":"string"},"value":{"description":"The amount of the resource used, in reference to the unit","type":"number"}},"required":["resource","unit","value"],"type":"object"},"ResponseMeta":{"additionalProperties":false,"properties":{"next":{"description":"Used for result set pagination.  If this value is non-null, pass the value as the \"next\" parameter\nin the subsequent GET request to retrieve the next page of result data.","nullable":true,"type":"string"}},"type":"object"},"RoutingAction":{"description":"How the conversation should be handled - `assign` or `donotroute`\n\n`assign`: Assign the message to one or more Spoke users, if this value is set, then `assignUsers` is required\n\n`donotroute`: Do not assign any users. The conversation will remain open however no additional participants will be added to the conversation. You can\nuse this option to block an incoming message due to content, profanity etc.","enum":["assign","donotroute"],"type":"string"},"SearchResult":{"anyOf":[{"$ref":"#/components/schemas/Device"},{"$ref":"#/components/schemas/UserWithAvailability"},{"$ref":"#/components/schemas/TeamWithAvailability"},{"$ref":"#/components/schemas/TrunkUser"},{"$ref":"#/components/schemas/TrunkDevice"},{"$ref":"#/components/schemas/TrunkQueue"},{"$ref":"#/components/schemas/PhonebookContact"}]},"SendNotificationPayload":{"anyOf":[{"$ref":"#/components/schemas/SendNotificationToUsersPayload"},{"$ref":"#/components/schemas/BroadcastNotificationToOrganisationPayload"}]},"SendNotificationToUsersPayload":{"additionalProperties":false,"properties":{"channels":{"items":{"$ref":"#/components/schemas/NotificationChannel"},"type":"array"},"message":{"$ref":"#/components/schemas/NotificationMessage"},"userIds":{"items":{"type":"string"},"type":"array"}},"required":["message","userIds"],"type":"object"},"SenderType":{"enum":["e164","userEmail"],"type":"string"},"ServiceAuthIdentity":{"additionalProperties":false,"properties":{"scope":{"items":{"type":"string"},"type":"array"},"serviceId":{"type":"string"},"serviceName":{"type":"string"},"subjectType":{"$ref":"#/components/schemas/SubjectTypeEnum"}},"required":["scope","serviceId","serviceName","subjectType"],"type":"object"},"SharedContactContext":{"additionalProperties":false,"description":"The details about the activity in which the contact was shared.\n\nThis field will be an empty object if the contact was shared from the External directory.","properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/CallWithoutContact"},{"$ref":"#/components/schemas/ConversationWithoutContact"}],"description":"The details of the activity in which the contact was shared from the Spoke Phone application.\n\nWhen `type` is `call`, this field contains the details of the call.\n\nWhen `type` is `conversation`, this field contains the details of the conversation.\n\nThis field will be missing if the contact was shared from the External directory."},"type":{"description":"Identifies the activity in which the contact was shared from the Spoke Phone application.\n\nPossible values:\n- `call`: The contact was shared from a call, either from the Participants tab of a live call or from the details of a Call History item.\n- `conversation`: The contact was shared from a conversation.\n\nThis field will be missing if the contact was shared from the External directory.","enum":["call","conversation"],"type":"string"}},"type":"object"},"SharedContactContextData":{"anyOf":[{"$ref":"#/components/schemas/CallWithoutContact"},{"$ref":"#/components/schemas/ConversationWithoutContact"}]},"SharedContactContextType":{"enum":["call","conversation"],"type":"string"},"SharedContactInternalContext":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"conversationSid":{"type":"string"}},"type":"object"},"type":{"$ref":"#/components/schemas/SharedContactContextType"}},"required":["data","type"],"type":"object"},"SmsConversation":{"additionalProperties":false,"properties":{"assignedContact":{"anyOf":[{"$ref":"#/components/schemas/AssignedContact"},{"nullable":true}],"description":"The phonebook contact (if any) associated with the external party on the conversation."},"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"channel":{"const":"sms","description":"The type of the conversation channel.\n\nThe value for this field will always be `sms`, signifying that the conversation is an SMS conversation between one or more Spoke users represented by a\nsingle company address and a single external contact address.","type":"string"},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.","type":"string"},"companyNumberOwner":{"anyOf":[{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},{"nullable":true}],"description":"The entry in the Spoke directory that the `companyNumber` is assigned to. This field is populated\nwhen the conversation is created and is not updated if the conversation is re-assigned to a different\ndirectory entry.\n\nThis field identifies the Spoke team or user that the `companyNumber` is assigned to. It will be\nnull for conversations involving company numbers that are not assigned to a user or team."},"contactNumber":{"description":"The phone number of the external party that originated or received this conversation. Use this field\nfor CRM integration if there is no value in the `assignedContact` field and you wish to create\na new record for unknown customer numbers.\n\nThe value of this field will always be a phone number in +E164 format (e.g. +16508221060).","type":"string"},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"const":false,"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `false` for conversations with an external party (i.e. SMS, Group MMS or WhatsApp conversations).","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.","items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["channel","companyNumber","contactNumber","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"SubjectTypeEnum":{"enum":["client","internal","user"],"type":"string"},"T":{"additionalProperties":false,"type":"object"},"Tariff":{"additionalProperties":false,"description":"The overall call tariff calculated by Spoke's call tariffing engine.\n\n***Note***: This field is only populated when the optional \"Call Tariffing API\" add-on is enabled.\n\nFor BYOT Customers:\n* Tariffing does not meter calls that are not carried by Spoke. For example, Flex-only or\n  Studio-only calls will not be metered.\n* Due to the asynchronous nature of the Twilio platform, call durations are likely to differ\n  on Spoke vs Twilio.\n* Incoming calls that are initially handled through Studio before being redirected to Spoke\n  will have their start time as the time the Spoke Redirect Handler was called.  In these cases,\n  the total time for an inbound call tariffed on Spoke will not include the time the caller was\n  interacting with Studio.\n\nAll calls are tariffed in real time. This field will be populated once the call has ended.\n\nTariffing does not meter other services such as call recording.\n\nTariffs are calculated based on the following factors:\n\n* The number of connected call parties. An `answered` call has a **minimum** of two call party\n  connections.\n\n* Each party is tariffed based on a call route. There are a number of factors which determine a\n  call route, including the mode of transport (e.g. Spoke Client, SIP or PSTN), and, in the case\n  of PSTN calls, the initiator and recipient numbers\n\n* If a a user leaves and then rejoins a call via transfer or conference, each instance will be treated\n  as a separate party for the purpose of tariffing. Each party connection is identifiable by vendorCallId\n  for reconciliation against external systems\n\n* Call duration. By default, the Spoke tariffing engine tariffs calls rounded up to the nearest minute.\n  This means that a connection which is 10 seconds long will be billed with a quantity of 1, similarly\n  a connection which is 75 seconds long will be billed with a quantity of 2\n\n* The total call cost is calculated as the sum of the individual connected party tariffs.","properties":{"connectedPartyTariffs":{"items":{"$ref":"#/components/schemas/ConnectedPartyTariff"},"type":"array"},"total":{"description":"The total cost of the call as calculated by the tariffing engine","type":"number"}},"required":["connectedPartyTariffs","total"],"type":"object"},"TeamAvailability":{"additionalProperties":false,"description":"The team's current availability to take calls","properties":{"availabilitySummary":{"description":"Describes the current availability of the team based on the status of individual team members.\n\nThis field is automatically generated.","type":"string"},"status":{"description":"The current availability status.\n\nThis field will contain one of the following values:\n\n- ***available***: available for taking a call\n- ***busy***: active but not available to take a call.\n- ***offline***: not active and not available to take a call.","enum":["available","busy","offline"],"type":"string"},"totalAvailable":{"description":"The total number of team members currently with an `available` status","type":"number"},"totalMembers":{"description":"The total number of team members in this team. This includes active, invited and suspended members, and any standalone SIP devices.","type":"number"}},"type":"object"},"TeamDeletedEventData":{"additionalProperties":false,"properties":{"teamId":{"type":"string"}},"required":["teamId"],"type":"object"},"TeamEventData":{"additionalProperties":false,"properties":{"team":{"$ref":"#/components/schemas/TeamWithAvailability"}},"required":["team"],"type":"object"},"TeamEventDataType":{"additionalProperties":false,"properties":{"team":{"$ref":"#/components/schemas/TeamWithAvailability"}},"required":["team"],"type":"object"},"TeamMembersAddedEventData":{"additionalProperties":false,"properties":{"teamId":{"type":"string"},"userIds":{"items":{"type":"string"},"type":"array"}},"required":["teamId","userIds"],"type":"object"},"TeamMembersRemovedEventData":{"additionalProperties":false,"properties":{"teamId":{"type":"string"},"userIds":{"items":{"type":"string"},"type":"array"}},"required":["teamId","userIds"],"type":"object"},"TeamMessageRoutingAction":{"description":"Defines whether to assign users to the conversation that is created as a result of the message.\n\nPossible values:\n* `assign_users`: Assign the conversation to one or more Spoke users.  If this value is used, the assignUsers parameter must be non-empty\n\n* `do_not_route`: Do not assign any Spoke users to the conversation.  If the customer replies, no one will be able to respond to the customer\n\n* `assign_team`: Use this value to have all users in the team associated with the companyAddress field automatically assigned to the conversation. This is\nequivalent to the team receiving a new inbound message to the number.","enum":["assign_team","assign_users","do_not_route"],"type":"string"},"TeamWithAvailability":{"additionalProperties":false,"properties":{"availability":{"$ref":"#/components/schemas/TeamAvailability"},"displayName":{"description":"The display name of this directory entry.","type":"string"},"extension":{"type":"string"},"id":{"description":"The id of the team","type":"string"},"isHidden":{"description":"Indicates whether the team is hidden from Spoke directory or not.","type":"boolean"},"ivrKeyCode":{"description":"[ 0 .. 9 ]","type":"number"},"phoneNumbers":{"description":"The list of phone numbers (DIDs) associated with this team","items":{"$ref":"#/components/schemas/DirectoryPhoneNumber"},"type":"array"},"teamMembers":{"items":{"$ref":"#/components/schemas/UserWithAvailability"},"type":"array"},"twimlRedirectUrl":{"description":"Redirecting an inbound Twilio call to this target url will transfer the call to this entry.\nUse this URL to send a call to Spoke from Twilio Studio, Flex or your own TwiML application.\n\nYou can add additional parameters to this url to control how the call is handled by Spoke.\nSee [Routing Twilio Calls into Spoke](#section/Core-Concepts/Routing-Twilio-calls-into-Spoke)\nfor more information.","type":"string"},"type":{"const":"team","type":"string"}},"required":["displayName","id","isHidden","phoneNumbers","type"],"type":"object"},"TemplateApprovalStatus":{"enum":["approved","disabled","paused","pending","received","rejected","unsubmitted"],"type":"string"},"TemplateType":{"const":"twilio/text","type":"string"},"TextTemplate":{"additionalProperties":false,"properties":{"body":{"type":"string"}},"required":["body"],"type":"object"},"Transcript":{"additionalProperties":false,"description":"The transcript","properties":{"createdAt":{"description":"UTC timestamp of the transcript creation","type":"number"},"id":{"description":"ID of the transcript","type":"string"},"source":{"$ref":"#/components/schemas/TranscriptSource"},"speakers":{"description":"The list of speakers in the transcript","items":{"$ref":"#/components/schemas/TranscriptSpeaker"},"type":"array"},"text":{"description":"The full text of the transcript\n\nIf the audio source is a call recording:\n  * The transcript may include `JOIN` and `LEAVE` events if any speakers join or leave the call while it's being recorded.\n  * The timestamp on each line is offset from the start of the first call recording if the call has multiple recordings\n\nExample:\n\n`\"[JOIN: Alice Johnson (0:01)]\\n\\n[Alice Johnson (0:02)]: Hello Bob, how can I assist you today?\\n\\n[Bob Smith (0:05)]: Hi Alice, I cannot login into my\naccount.\\n\\n[Alice Johnson (0:08)]: Okay, let me transfer to you to one of our account managers. Just a moment.\\n\\n[LEAVE: Alice Johnson (0:10)]\\n\\n[JOIN:\nDavid Young (0:20)]\\n\\n[David Young (0:22)]: Hi Bob, I understand you're having trouble logging into your account.\"`","type":"string"}},"required":["createdAt","id","source","speakers","text"],"type":"object"},"TranscriptCreateEventData":{"additionalProperties":false,"properties":{"contextId":{"type":"string"},"source":{"additionalProperties":false,"properties":{"channels":{"type":"number"},"endTimestamp":{"description":"Source start time for this source. Only populated for call recordings\nUnix timestamp in milliseconds","type":"number"},"id":{"type":"string"},"s3Bucket":{"type":"string"},"s3Key":{"type":"string"},"startTimestamp":{"description":"Source start time for this source. Only populated for call recordings\nUnix timestamp in milliseconds","type":"number"},"type":{"$ref":"#/components/schemas/TranscriptSourceType"}},"required":["channels","id","s3Bucket","s3Key","type"],"type":"object"},"speakers":{"items":{"$ref":"#/components/schemas/TranscriptSpeakerWithConnections"},"type":"array"},"transcriptId":{"type":"string"},"transcriptStartOffsetSec":{"description":"The offset in seconds from the source start time\nTo be used when generating the timestamp of each segment","type":"number"}},"required":["contextId","source","speakers"],"type":"object"},"TranscriptCreateResultData":{"additionalProperties":false,"properties":{"transcriptId":{"type":"string"}},"required":["transcriptId"],"type":"object"},"TranscriptCreatedEventDetail":{"additionalProperties":false,"properties":{"organisationId":{"type":"string"},"sourceContextId":{"type":"string"},"sourceId":{"type":"string"},"transcriptId":{"type":"string"}},"required":["organisationId","sourceContextId","sourceId","transcriptId"],"type":"object"},"TranscriptEventData":{"additionalProperties":false,"properties":{"links":{"$ref":"#/components/schemas/TranscriptLinks"},"transcript":{"$ref":"#/components/schemas/Transcript"}},"required":["transcript"],"type":"object"},"TranscriptEventDataType":{"additionalProperties":false,"properties":{"links":{"$ref":"#/components/schemas/TranscriptLinks"},"transcript":{"$ref":"#/components/schemas/Transcript"}},"required":["transcript"],"type":"object"},"TranscriptLinks":{"additionalProperties":false,"description":"The URLs for resources associated with the transcript","properties":{"call":{"description":"URL of the call resource associated with the transcript","type":"string"},"recording":{"description":"URL of the call recording resource associated with the transcript","type":"string"},"segments":{"description":"URL of the transcript segments associated with the transcript","type":"string"}},"required":["segments"],"type":"object"},"TranscriptSegment":{"additionalProperties":false,"properties":{"endTime":{"description":"The end time of the segment in milliseconds from audio start","type":"number"},"speakerId":{"description":"The speaker ID of the segment","type":"string"},"startTime":{"description":"The start time of the segment in milliseconds from audio start","type":"number"},"text":{"description":"The text of the segment","type":"string"},"words":{"description":"The list of words in the segment","items":{"$ref":"#/components/schemas/TranscriptWord"},"type":"array"}},"required":["endTime","startTime","text","words"],"type":"object"},"TranscriptSource":{"additionalProperties":false,"description":"The source or origin of the audio content being transcribed.\n\nA transcript can be created from a call recording or a voicemail.","properties":{"contextId":{"description":"The ID of the parent context that the transcript belongs to. The value of this field is dependent\non the of the `type` field:\n\n* `call`: the Spoke's call ID\n* `voicemail`: the Spoke's call ID that the voicemail belongs to","type":"string"},"id":{"description":"The ID of the transcript source. This is usually the ID of the recording or audio that was transcribed.","type":"string"},"type":{"$ref":"#/components/schemas/TranscriptSourceType"}},"required":["contextId","id","type"],"type":"object"},"TranscriptSourceType":{"description":"The type of the transcript source","enum":["call","voicemail"],"type":"string"},"TranscriptSpeaker":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the speaker","type":"string"},"email":{"description":"The email address of the speaker","type":"string"},"id":{"description":"The ID of the speaker","type":"string"},"numberE164":{"description":"The phone number of the speaker","type":"string"}},"required":["displayName","id"],"type":"object"},"TranscriptSpeakerWithConnections":{"additionalProperties":false,"properties":{"channel":{"description":"The audio channel of the speaker - 0, or 1 in the case of dual channel calls.","type":"number"},"connections":{"description":"An array of connections that overlaps with the transcript source start and end time\nOnly available for call recordings","items":{"additionalProperties":false,"properties":{"channel":{"description":"The audio channel of the speaker for this connection - 0, or 1 in the case of dual channel calls.","type":"number"},"joinedTimestamp":{"description":"Join time for this connection\nUnix timestamp in milliseconds","type":"number"},"leftTimestamp":{"description":"Leave time for this connection\nUnix timestamp in milliseconds","type":"number"}},"required":["joinedTimestamp"],"type":"object"},"type":"array"},"displayName":{"description":"The display name of the speaker","type":"string"},"email":{"description":"The email address of the speaker","type":"string"},"id":{"description":"The ID of the speaker","type":"string"},"numberE164":{"description":"The phone number of the speaker","type":"string"}},"required":["displayName","id"],"type":"object"},"TranscriptWord":{"additionalProperties":false,"properties":{"endTime":{"description":"The end time of the word in milliseconds from audio start","type":"number"},"startTime":{"description":"The start time of the word in milliseconds from audio start","type":"number"},"text":{"description":"The text of the word","type":"string"}},"required":["endTime","startTime","text"],"type":"object"},"TranscriptionFailedEventDetail":{"additionalProperties":false,"properties":{"organisationId":{"type":"string"},"sourceContextId":{"type":"string"},"sourceId":{"type":"string"},"transcriptId":{"type":"string"}},"required":["organisationId","sourceContextId","sourceId","transcriptId"],"type":"object"},"TranscriptsRequest":{"additionalProperties":false,"properties":{"before":{"description":"Get all matching transcripts created before (UNIX timestamp)","type":"string"},"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"},"since":{"description":"Get all matching transcripts created since (UNIX timestamp)","type":"string"},"sourceContextId":{"description":"Only return transcripts where the `source.contextId` field matches the parameter value","type":"string"},"sourceId":{"description":"Only return transcripts where the `source.id` field matches the parameter value","type":"string"}},"type":"object"},"TrunkDeviceFields":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"type":"object"},"TrunkDevices":{"items":{"$ref":"#/components/schemas/TrunkDevice"},"type":"array"},"TrunkQueueFields":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"}},"type":"object"},"TrunkQueueRequest":{"additionalProperties":false,"properties":{"externalId":{"description":"If provided, the external ID of the queue to get","type":"string"},"id":{"description":"If provided, the ID of the queue to get","type":"string"},"limit":{"description":"If provided, number of queues fetched per request","type":"string"},"next":{"description":"If provided, pagination for list of queues","type":"string"}},"type":"object"},"TrunkQueues":{"items":{"$ref":"#/components/schemas/TrunkQueue"},"type":"array"},"TrunkUserEmail":{"additionalProperties":false,"properties":{"emailAddress":{"description":"The email address","type":"string"},"label":{"description":"The email label e.g. work, personal","type":"string"}},"required":["emailAddress"],"type":"object"},"TrunkUserFields":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"}},"required":["fullName"],"type":"object"},"TrunkUserPhoneNumber":{"additionalProperties":false,"properties":{"assignToUser":{"description":"Flag to signify whether this phone number can be used by the assigned user in the spoke platform.\nSetting this flag will automatically create the phone number in the spoke phone numbers table and attach the phone number to the assigned user.\nThis requires either `assignToUserEmail` or `assignToUserId` to be provided.","type":"boolean"},"label":{"description":"The number label e.g. work, home","type":"string"},"phoneNumber":{"description":"The phone number","type":"string"}},"required":["phoneNumber"],"type":"object"},"TrunkUsers":{"items":{"$ref":"#/components/schemas/TrunkUser"},"type":"array"},"Trunks":{"items":{"$ref":"#/components/schemas/Trunk"},"type":"array"},"UpdateWebhookRequest":{"additionalProperties":false,"properties":{"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","items":{"$ref":"#/components/schemas/EventType"},"type":"array"},"id":{"description":"The webhook ID","type":"string"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["id"],"type":"object"},"UpdateWebhookRequestBody":{"additionalProperties":false,"properties":{"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","items":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","type":"string"},"type":"array"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"type":"object"},"UpdatedContactShared":{"additionalProperties":false,"description":"The details of the contact that was updated by the user.\n\nThis field contains the details of the existing contact, with the `phoneNumbers` field containing an additional phone number that the user had shared.","properties":{"companyName":{"description":"Optional company name of the contact","nullable":true,"type":"string"},"emails":{"description":"Optional list of emails of the contact","items":{"$ref":"#/components/schemas/Email"},"type":"array"},"firstName":{"description":"Optional first name of the contact","nullable":true,"type":"string"},"id":{"description":"The ID of the contact","type":"string"},"jobTitle":{"description":"Optional job title of the contact","nullable":true,"type":"string"},"lastName":{"description":"Optional last name of the contact","nullable":true,"type":"string"},"phoneNumbers":{"description":"List of phone numbers of the contact","items":{"$ref":"#/components/schemas/PhoneNumber"},"type":"array"},"phonebookId":{"description":"The ID of the phonebook this contact belongs to","type":"string"},"phonebookManagedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"phonebookName":{"description":"The name of the phonebook this contact belongs to","type":"string"}},"required":["id","phoneNumbers","phonebookId","phonebookManagedBy"],"type":"object"},"UpsertContactRequest":{"additionalProperties":false,"properties":{"contact":{"$ref":"#/components/schemas/ContactInput"},"countryIso":{"description":"Country ISO code for formatting local phone numbers","nullable":true,"type":"string"},"phonebookId":{"description":"ID of the phonebook that contact belongs to","type":"string"}},"required":["contact","phonebookId"],"type":"object"},"UpsertContentAnalysisConfigRequest":{"additionalProperties":false,"properties":{"defaultProfile":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisLensGroupIdentifiers"},{"nullable":true}]},"description":{"description":"Description of the organisation","type":"string"},"locale":{"description":"Default locale used when performing a content analysis, e.g. `en-US`","type":"string"},"organisationId":{"description":"ID of the Spoke organisation","type":"string"},"profiles":{"description":"A list of profiles, which describe which lens group to use for a given set of users when performing a content analysis","items":{"$ref":"#/components/schemas/ContentAnalysisConfigProfile"},"type":"array"},"timezone":{"description":"Default timezone used when performing a content analysis. It must follow the IANA format, e.g. `America/New_York`","type":"string"}},"type":"object"},"UpsertPhonebookRequest":{"additionalProperties":false,"properties":{"contacts":{"description":"The list of contacts belonging to this phonebook","items":{"$ref":"#/components/schemas/ContactInput"},"type":"array"},"countryIso":{"description":"Country ISO code for formatting local phone numbers. Must be set if contacts are given","nullable":true,"type":"string"},"description":{"description":"The description of the phonebook","type":"string"},"id":{"description":"ID of the phonebook to upsert. Leave blank to create a new phonebook","type":"string"},"name":{"description":"The name of the phonebook","type":"string"}},"type":"object"},"User":{"additionalProperties":false,"description":"A User represents a user of the Spoke platform.","properties":{"email":{"description":"User's email address (as registered in Spoke)","nullable":true,"type":"string"},"firstName":{"description":"User's first name","nullable":true,"type":"string"},"jobTitle":{"description":"User's job title (as registered in Spoke)","nullable":true,"type":"string"},"lastName":{"description":"User's last name","nullable":true,"type":"string"},"location":{"description":"User’s location (as registered in Spoke)","nullable":true,"type":"string"},"manager":{"anyOf":[{"$ref":"#/components/schemas/ManagerUserDirectoryEntry"},{"nullable":true}]},"mobile":{"description":"User's mobile number (as registered in Spoke)\n\nThis will be omitted if the organisation is configured to exclude mobile numbers from API responses","nullable":true,"type":"string"},"userId":{"description":"The id of the user","type":"string"}},"required":["userId"],"type":"object"},"UserAvailabilityRuleGetEventData":{"additionalProperties":false,"properties":{"userId":{"type":"string"}},"required":["userId"],"type":"object"},"UserAvailabilityRuleGetResultData":{"additionalProperties":false,"properties":{"rules":{"items":{"additionalProperties":false,"properties":{"busyDuration":{"description":"What the user picks on Spoke app when setting status to busy","enum":["allDay","fifteenMinutes","oneHour","thirtyMinutes","twoHours"],"type":"string"},"enabled":{"type":"boolean"},"end":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"},"name":{"type":"string"},"start":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"}},"required":["enabled","end","name","start"],"type":"object"},"type":"array"}},"required":["rules"],"type":"object"},"UserAvailabilityRuleUpsertEventData":{"additionalProperties":false,"properties":{"rule":{"additionalProperties":false,"properties":{"busyDuration":{"description":"What the user picks on Spoke app when setting status to busy","enum":["allDay","fifteenMinutes","oneHour","thirtyMinutes","twoHours"],"type":"string"},"enabled":{"type":"boolean"},"end":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"},"name":{"type":"string"},"start":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"}},"required":["enabled","end","name","start"],"type":"object"},"userId":{"type":"string"}},"required":["rule","userId"],"type":"object"},"UserAvailabilityRuleUpsertResultData":{"additionalProperties":false,"properties":{"rules":{"items":{"additionalProperties":false,"properties":{"busyDuration":{"description":"What the user picks on Spoke app when setting status to busy","enum":["allDay","fifteenMinutes","oneHour","thirtyMinutes","twoHours"],"type":"string"},"enabled":{"type":"boolean"},"end":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"},"name":{"type":"string"},"start":{"additionalProperties":false,"properties":{"cron":{"type":"string"},"state":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"externalCallId":{"type":"string"},"reason":{"type":"string"},"status":{"$ref":"#/components/schemas/AvailabilityStatus_1"},"timestamp":{"type":"number"}},"required":["status"],"type":"object"},"timestamp":{"type":"number"}},"type":"object"}},"required":["enabled","end","name","start"],"type":"object"},"type":"array"}},"required":["rules"],"type":"object"},"UserAvailabilitySetEventData":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"status":{"enum":["available","busy","offline"],"type":"string"},"timezone":{"type":"string"},"userId":{"type":"string"},"voip":{"type":"boolean"}},"required":["userId"],"type":"object"},"UserAvailabilityUnsetOnCallEventData":{"additionalProperties":false,"properties":{"callId":{"type":"string"},"userId":{"type":"string"}},"required":["callId","userId"],"type":"object"},"UserConversationGetAssignableContactsEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"memberId":{"type":"string"}},"required":["conversationSid","memberId"],"type":"object"},"UserConversationGetAssignableContactsResultData":{"additionalProperties":false,"properties":{"assignableContacts":{"items":{"$ref":"#/components/schemas/AssignableContact"},"type":"array"}},"required":["assignableContacts"],"type":"object"},"UserConversationGetAssociatedContactsEventData":{"additionalProperties":false,"properties":{"conversationSids":{"items":{"type":"string"},"type":"array"},"memberId":{"type":"string"}},"required":["memberId"],"type":"object"},"UserConversationGetAssociatedContactsResultData":{"additionalProperties":false,"properties":{"contactByNumberE164Map":{"$ref":"#/components/schemas/Record_string_Contact_"},"conversationSids":{"items":{"type":"string"},"type":"array"}},"required":["contactByNumberE164Map","conversationSids"],"type":"object"},"UserConversationGetEventData":{"additionalProperties":false,"properties":{"conversationSid":{"type":"string"},"memberId":{"type":"string"}},"required":["conversationSid","memberId"],"type":"object"},"UserConversationUpdateEventData":{"additionalProperties":false,"properties":{"allMessagesRead":{"type":"boolean"},"conversationSid":{"type":"string"},"conversationSids":{"items":{"type":"string"},"type":"array"},"memberId":{"type":"string"},"muted":{"type":"boolean"}},"required":["memberId"],"type":"object"},"UserDirectoryEntry":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"The email address of the entry.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke directory.","type":"string"}},"required":["displayName","id"],"type":"object"},"UserEventData":{"additionalProperties":false,"properties":{"user":{"$ref":"#/components/schemas/UserWithAvailability"}},"required":["user"],"type":"object"},"UserEventDataType":{"additionalProperties":false,"properties":{"user":{"$ref":"#/components/schemas/UserWithAvailability"}},"required":["user"],"type":"object"},"UserParticipant":{"additionalProperties":false,"properties":{"identity":{"description":"The memberId of user participant.","type":"string"},"type":{"const":"user","type":"string"}},"required":["identity","type"],"type":"object"},"UserPhonebookOwner":{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the user entry in the Spoke directory. This field is equivalent to the `displayName` field for a user directory entry in the Spoke API.","type":"string"},"email":{"description":"The email address of the user entry in the Spoke directory.","type":"string"},"id":{"description":"The unique ID of the user entry in the Spoke API","type":"string"},"type":{"const":"user","description":"The owner type of the phonebook. When this value is `user`, the phonebook is a personal phonebook owned by a user and is accessible only by the user.","type":"string"}},"required":["displayName","id","type"],"type":"object"},"UserRequest":{"additionalProperties":false,"properties":{"email":{"description":"If provided, the email of the user to get","type":"string"},"id":{"description":"If provided, the ID of the user to get","type":"string"},"limit":{"description":"Number of objects fetched per request","type":"string"},"next":{"description":"Pagination for list of objects","type":"string"}},"type":"object"},"UserSessionExpiredEventData":{"additionalProperties":false,"properties":{"userId":{"type":"string"}},"required":["userId"],"type":"object"},"UserSessionStartedEventData":{"additionalProperties":false,"properties":{"userId":{"type":"string"}},"required":["userId"],"type":"object"},"Users":{"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"users":{"items":{"$ref":"#/components/schemas/UserWithAvailability"},"type":"array"}},"required":["meta","users"],"type":"object"},"ValueWithLabel":{"additionalProperties":false,"properties":{"label":{"description":"Label for the data","type":"string"},"value":{"description":"Data value","type":"string"}},"required":["label","value"],"type":"object"},"VendorAccountOwner":{"additionalProperties":false,"properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["email","firstName","lastName"],"type":"object"},"VendorAccountUser":{"additionalProperties":false,"properties":{"email":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}},"required":["email","firstName","lastName"],"type":"object"},"Voicemail":{"additionalProperties":false,"description":"`Voicemail` associated with this call.\n\nIf a call with direction of inbound has a status of missed then there may be a voicemail recording. This provides\ndetails about the voicemail and optionally","properties":{"duration":{"description":"Duration of the voicemail recording in seconds","type":"number"},"durationText":{"description":"Duration of the voicemail recording in (mm:ss) format","type":"string"},"id":{"description":"The ID of the voicemail","type":"string"},"recordingUrl":{"description":"URL of the voicemail for retrieval.\n\nThe URL is a signed URL that expires six hours after the voicemail was recorded. To get a newly signed URL, GET the call resource from the `/calls/:id` API\nendpoint.\n\nIf the query parameter `includeRecordingUrl` is set to false, this will be omitted.","type":"string"},"recordingUrlExpiresTimestamp":{"description":"Expiry time (unix timestamp) of the signed URL. After this time the recording will no longer be retrievable.\n\nIf the query parameter `includeRecordingUrl` is set to false, this will be omitted.","type":"number"},"transcription":{"description":"The automatically transcribed text of the voicemail.","type":"string"},"transcriptionConfidence":{"description":"Number between 0 and 1 representing the \"confidence\" of the accuracy of the speech to text transcription.","type":"number"}},"required":["duration","durationText","id","transcription","transcriptionConfidence"],"type":"object"},"Webhook":{"additionalProperties":false,"properties":{"createdAt":{"description":"Date/Time (UTC - ISO8601 format) when the webhook was created","type":"string"},"createdTimestamp":{"description":"Unix timestamp when the webhook was created","type":"number"},"description":{"description":"The description of the webhook","type":"string"},"enabled":{"description":"Whether the webhook is enabled. Default value is `true`","type":"boolean"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","items":{"description":"The type of event that was emitted\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `call.tariffed`\n* `call.transcript.created`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`","type":"string"},"type":"array"},"id":{"description":"ID of the webhook","type":"string"},"mode":{"description":"The webhook mode. Default value is `production`","enum":["production","test"],"type":"string"},"signingSecret":{"description":"Signing secret used to sign the webhook requests","type":"string"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["createdAt","createdTimestamp","enabled","events","id","mode","signingSecret","url"],"type":"object"},"WebhookConfig":{"additionalProperties":false,"properties":{"created":{"type":"number"},"description":{"type":"string"},"enabled":{"type":"boolean"},"metadata":{"additionalProperties":true,"properties":{},"type":"object"},"organisationId":{"type":"string"},"signingSecret":{"type":"string"},"subscribedEventTypes":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array"},"testMode":{"type":"boolean"},"url":{"type":"string"},"userId":{"type":"string"},"webhookConfigId":{"type":"string"}},"required":["created","enabled","organisationId","signingSecret","subscribedEventTypes","testMode","url","userId","webhookConfigId"],"type":"object"},"WebhookEvent":{"additionalProperties":false,"properties":{"created":{"type":"string"},"event":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/EventDataType"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"eventDataId":{"type":"string"},"organisationId":{"type":"string"},"requestBody":{"type":"string"},"signingSecret":{"type":"string"},"timestamp":{"type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"url":{"type":"string"},"version":{"type":"string"},"webhookConfigId":{"type":"string"},"webhookEventId":{"type":"string"}},"required":["created","event","eventDataId","organisationId","requestBody","signingSecret","timestamp","type","url","version","webhookConfigId","webhookEventId"],"type":"object"},"WebhookEventDeliveryAttempt":{"additionalProperties":false,"properties":{"created":{"type":"string"},"event":{"additionalProperties":false,"properties":{"created":{"description":"UTC timestamp of when the event was emitted","type":"string"},"data":{"$ref":"#/components/schemas/EventDataType"},"id":{"description":"The ID of the event","type":"string"},"organisationId":{"description":"The ID of the organisation that the event belongs to","type":"string"},"timestamp":{"description":"Unix timestamp of when the event was originally emitted","type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"version":{"description":"Event version number, the version is a YYYY-mm-dd formatted string","examples":["2020-07-15"],"type":"string"}},"required":["created","data","id","organisationId","timestamp","type","version"],"type":"object"},"eventDataId":{"type":"string"},"organisationId":{"type":"string"},"requestBody":{"type":"string"},"responseBody":{"type":"string"},"responseTimeMs":{"type":"number"},"signature":{"type":"string"},"status":{"$ref":"#/components/schemas/DeliveryStatus"},"statusMessage":{"type":"string"},"timestamp":{"type":"number"},"type":{"$ref":"#/components/schemas/EventType"},"url":{"type":"string"},"version":{"type":"string"},"webhookConfigId":{"type":"string"},"webhookEventDeliveryAttemptId":{"type":"string"},"webhookEventId":{"type":"string"}},"required":["created","event","eventDataId","organisationId","requestBody","signature","status","statusMessage","timestamp","type","url","version","webhookConfigId","webhookEventDeliveryAttemptId","webhookEventId"],"type":"object"},"WebhookMode":{"description":"The mode of the webhook. Default value is `production`\n\nPossible values:\n* `test`: The webhook is in test mode. Delivery of events will not be retried if the first delivery fails.\n* `production`: The webhook is in production mode. Delivery of events will be retried according to our retry policy.","enum":["production","test"],"type":"string"},"WebhookRefreshSigningSecretEventData":{"additionalProperties":false,"properties":{"webhookId":{"type":"string"}},"required":["webhookId"],"type":"object"},"WhatsAppConversation":{"additionalProperties":false,"properties":{"assignedContact":{"anyOf":[{"$ref":"#/components/schemas/AssignedContact"},{"nullable":true}],"description":"The phonebook contact (if any) associated with the external party on the conversation."},"assignedUser":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The user assigned to the conversation. This is a calculated value and is determined as the first user\non the conversation"},"channel":{"const":"whatsApp","description":"The type of the conversation channel.\n\nThe value for this field will always be `whatsApp`, signifying that the conversation is a WhatsApp conversation between one or more Spoke users and an\nexternal party.","type":"string"},"companyNumber":{"description":"The company number that originated or received this conversation. This will be one of the numbers defined\nin the Spoke Phone Number settings page.","type":"string"},"companyNumberOwner":{"anyOf":[{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the entry in the Spoke directory.  This field is equivalent to the `displayName`\nfield for a directory entry in the Spoke Directory API.","type":"string"},"email":{"description":"For an entry of type `user` contains the email address of the entry. Not populated for other types.","type":"string"},"id":{"description":"The unique ID of the entry in the Spoke API","type":"string"},"type":{"$ref":"#/components/schemas/ConversationDirectoryEntryType"}},"required":["displayName","id","type"],"type":"object"},{"nullable":true}],"description":"The entry in the Spoke directory that the `companyNumber` is assigned to. This field is populated\nwhen the conversation is created and is not updated if the conversation is re-assigned to a different\ndirectory entry.\n\nThis field identifies the Spoke team or user that the `companyNumber` is assigned to. It will be\nnull for conversations involving company numbers that are not assigned to a user or team."},"contactNumber":{"description":"The phone number of the external party that originated or received this conversation. Use this field\nfor CRM integration if there is no value in the `assignedContact` field and you wish to create\na new record for unknown customer numbers.\n\nThe value of this field will always be a phone number in +E164 format (e.g. +16508221060).","type":"string"},"id":{"description":"The id of the conversation","type":"string"},"initiatedBy":{"anyOf":[{"enum":["api","contact","user"],"type":"string"},{"nullable":true}],"description":"Identifies whether the conversation was initiated by a user, a contact or via the Spoke API.\n\nPossible values:\n* `user`: A Spoke user initiated the conversation\n* `contact`: The external party initiated the conversation\n* `api`: The conversation was initiated by a call to the Spoke API"},"isInternal":{"const":false,"description":"Indicates whether the conversation was an internal (Spoke User to Spoke User) conversation.\n\nThe value for this field will always be `false` for conversations with an external party (i.e. SMS, Group MMS or WhatsApp conversations).","type":"boolean"},"lastModifiedAt":{"description":"Date/Time (UTC - ISO8601 format) that last message received from this conversation.","type":"string"},"lastModifiedTimestamp":{"description":"Unix timestamp that last message received from this conversation.","type":"number"},"messages":{"description":"A list of Messages for this conversation.","items":{"$ref":"#/components/schemas/Message"},"type":"array"},"name":{"description":"The name of the conversation.  This is the name that is displayed in the Spoke application.","nullable":true,"type":"string"},"participants":{"description":"A list of the participants in this conversation.\n\nA conversation participant represents either a Spoke user or an external contact. The `type` field of each participant indicates whether the participant is\na Spoke user or an external contact.","items":{"anyOf":[{"$ref":"#/components/schemas/ConversationParticipant.User"},{"$ref":"#/components/schemas/ConversationParticipant.Contact"}]},"type":"array"},"passthroughParameters":{"additionalProperties":true,"description":"Passthrough parameters associated with the Conversation. Use passthrough parameters to initiate and trace conversations\nfrom other systems.\n\nPassthrough parameters can be associated with a Conversation via the following mechanisms.\n\n* Send SMS API - sending a message via the Spoke API.\n* Send Team SMS API - sending a Team message via the Spoke API\n* Data Action - returning passthrough parameters the response to a Conversation related data action request.\n\nThe parameter names and values are safety checked and stored on input and no additional processing is performed.","properties":{},"type":"object"},"user":{"anyOf":[{"$ref":"#/components/schemas/User"},{"nullable":true}],"description":"The first user on the conversation. This is the user who either initiated the conversation (for outbound conversation)\nor received the conversation (for inbound conversation)."},"vendor":{"description":"The CPaaS vendor that carried the call. One of the following values:\n\n* `twilio`","enum":["twilio"],"type":"string"},"vendorConversationId":{"description":"The vendor's identifier for the conversation. The value of this field is dependent\non the value of the `vendor` field\n\n* `twilio`: the `ConversationSid` of the conversation","type":"string"}},"required":["channel","companyNumber","contactNumber","id","isInternal","lastModifiedAt","lastModifiedTimestamp","messages","participants","vendor","vendorConversationId"],"type":"object"},"_AuthIdentity":{"additionalProperties":false,"properties":{"scope":{"items":{"type":"string"},"type":"array"},"subjectType":{"$ref":"#/components/schemas/SubjectTypeEnum"}},"required":["scope","subjectType"],"type":"object"},"_BaseWebhook":{"additionalProperties":false,"properties":{"description":{"description":"The description of the webhook","type":"string"},"events":{"description":"The list of events the webhook is subscribed to\n\nPossible values include:\n\n* `call.started`\n* `call.answered`\n* `call.not_answered`\n* `call.hungup`\n* `call.ended`\n* `call.recording.available`\n* `call.voicemail.available`\n* `call.note.created`\n* `call.highlight.created`\n* `call.highlight.recording_available`\n* `call.contact_assigned`\n* `call.contact_assigned_with_add`\n* `call.contact_assigned_with_update`\n* `call.form.started`\n* `call.form.submitted`\n* `contact.shared`\n* `conversation.inactive`\n* `conversation.closed`\n* `conversation.message.created`\n* `conversation.contact_assigned`\n* `user.availability.updated`\n* `team.availability.updated`\n* `transcript.created`\n* `content_analysis.completed`","items":{"$ref":"#/components/schemas/EventType"},"type":"array"},"url":{"description":"The URL of the webhook. Must be a valid HTTPS URL","type":"string"}},"required":["events","url"],"type":"object"},"_ByWebhookId":{"additionalProperties":false,"properties":{"id":{"description":"The webhook ID","type":"string"}},"required":["id"],"type":"object"},"_EditableTrunkDevice":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"required":["name"],"type":"object"},"_EditableTrunkQueue":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"name":{"description":"The queue's name","type":"string"}},"required":["name"],"type":"object"},"_EventDetail":{"additionalProperties":false,"description":"The event detail should always contain the organisationId","properties":{"organisationId":{"type":"string"}},"required":["organisationId"],"type":"object"},"_TrunkDevice":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"extension":{"description":"The device's extension","type":"string"},"externalId":{"description":"The external ID of the device","type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"}},"required":["extension","externalId","name"],"type":"object"},"_TrunkQueue":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"extension":{"description":"The queue's extension","type":"string"},"externalId":{"description":"The external ID of the queue","type":"string"},"name":{"description":"The queue's name","type":"string"}},"required":["extension","externalId","name"],"type":"object"},"_TrunkUser":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"extension":{"description":"The user's extension","type":"string"},"externalId":{"description":"The external ID of the user","type":"string"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"}},"required":["extension","externalId","fullName"],"type":"object"},"_WebhookEventDeliveryAttempt":{"additionalProperties":false,"properties":{"responseBody":{"type":"string"},"responseTimeMs":{"type":"number"},"signature":{"type":"string"},"status":{"$ref":"#/components/schemas/DeliveryStatus"},"statusMessage":{"type":"string"},"webhookEventDeliveryAttemptId":{"type":"string"}},"required":["signature","status","statusMessage","webhookEventDeliveryAttemptId"],"type":"object"},"CreateTrunkDeviceRequest":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"extension":{"description":"The device's extension","type":"string"},"externalId":{"description":"The external ID of the device","type":"string"},"externalType":{"type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"},"trunkId":{"type":"string"}},"required":["extension","externalId","name","trunkId"],"type":"object"},"CreateTrunkQueueRequest":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"extension":{"description":"The queue's extension","type":"string"},"externalId":{"description":"The external ID of the queue","type":"string"},"externalType":{"type":"string"},"name":{"description":"The queue's name","type":"string"},"trunkId":{"type":"string"}},"required":["extension","externalId","name","trunkId"],"type":"object"},"CreateTrunkUserRequest":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"extension":{"description":"The user's extension","type":"string"},"externalId":{"description":"The external ID of the user","type":"string"},"externalType":{"type":"string"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"},"trunkId":{"type":"string"}},"required":["extension","externalId","fullName","trunkId"],"type":"object"},"DeleteTrunkEntityByExternalIdInput":{"additionalProperties":false,"properties":{"externalId":{"type":"string"},"externalType":{"type":"string"},"id":{"type":"string"},"trunkId":{"type":"string"}},"required":["externalType","trunkId"],"type":"object"},"DeleteTrunkEntityByIdInput":{"additionalProperties":false,"properties":{"externalId":{"type":"string"},"externalType":{"type":"string"},"id":{"type":"string"},"trunkId":{"type":"string"}},"required":["id","trunkId"],"type":"object"},"DeleteTrunkEntityInput":{"additionalProperties":false,"properties":{"externalId":{"type":"string"},"externalType":{"type":"string"},"id":{"type":"string"},"trunkId":{"type":"string"}},"required":["trunkId"],"type":"object"},"DirectoryEntryData":{"additionalProperties":false,"properties":{"directoryEntryId":{"type":"string"},"entryData":{},"entryId":{"type":"string"},"entryType":{"$ref":"#/components/schemas/DirectoryEntryTypeEnum"},"organisationId":{"type":"string"},"searchableWeightA":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'A' (highest)","type":"string"},"searchableWeightB":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'B'","type":"string"},"searchableWeightC":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'C'","type":"string"},"searchableWeightD":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'D' (lowest)","type":"string"},"sourceName":{"type":"string"},"sourceType":{"$ref":"#/components/schemas/DirectoryEntrySourceType"}},"required":["directoryEntryId","entryData","entryId","entryType","organisationId","searchableWeightA","searchableWeightB","searchableWeightC","searchableWeightD","sourceType"],"type":"object"},"DirectoryEntrySearchResult":{"additionalProperties":false,"properties":{"entryData":{},"entryId":{"type":"string"},"entryType":{"$ref":"#/components/schemas/DirectoryEntryTypeEnum"},"rank":{"type":"number"},"sourceName":{"type":"string"},"sourceType":{"$ref":"#/components/schemas/DirectoryEntrySourceType"}},"required":["entryData","entryId","entryType","sourceType"],"type":"object"},"DirectoryEntrySourceType":{"enum":["internal","phonebook"],"type":"string"},"DirectoryRequest":{"additionalProperties":false,"properties":{"extension":{"description":"Returns directory filtered by extension number. Exact match only.\nThis parameter is incompatible with `ivrKey` and `phoneNumber`","type":"string"},"includeHiddenCallGroups":{"type":"string"},"includeSuspendedUsers":{"type":"string"},"ivrKey":{"description":"Returns directory filtered by ivr key. Exact match only. As IVR Key is only assignable to teams, the result set will contain 1 matching team.\nThis parameter is incompatible with `extension` and `phoneNumber`","type":"string"},"limit":{"description":"The number of entries fetched per request","type":"string"},"next":{"description":"The pagination key for retrieving the next page of result set entries","type":"string"},"phoneNumber":{"description":"Returns directory filtered by phone number. Exact match only. The result set will return the directory entry with the assigned phone number.\nThis parameter is incompatible with `extension` and `ivrKey`","type":"string"}},"type":"object"},"DynamoDbIndexEnum":{"enum":["OrganisationIdIndex","partyIdOrganisationIdIndex"],"type":"string"},"DynamodbTableEnum":{"enum":["Contact","Organisation","PhoneNumberContactMap","Phonebook","PhonebookContactWriteEvent"],"type":"string"},"Extension":{"additionalProperties":false,"properties":{"extension":{"type":"string"},"extensionId":{"type":"string"},"organisationId":{"type":"string"},"partyId":{"type":"string"}},"required":["extension","organisationId"],"type":"object"},"GqlError":{"additionalProperties":false,"properties":{"data":{"type":"string"},"type":{"type":"string"}},"required":["type"],"type":"object"},"Member":{"additionalProperties":false,"properties":{"email":{"type":"string"},"federatedIdentity":{"type":"string"},"firstName":{"type":"string"},"globalRole":{"type":"string"},"jobTitle":{"type":"string"},"lastName":{"type":"string"},"location":{"type":"string"},"memberId":{"type":"string"},"memberRole":{"type":"string"},"mobile":{"type":"string"},"organisationId":{"type":"string"},"partner":{"type":"string"},"partnerId":{"type":"string"},"status":{"type":"string"},"userId":{"type":"string"}},"required":["memberId","memberRole","organisationId","partner","partnerId","userId"],"type":"object"},"ParsedDirectoryRequest":{"additionalProperties":false,"properties":{"extension":{"description":"Returns directory filtered by extension number. Exact match only.\nThis parameter is incompatible with `ivrKey` and `phoneNumber`","type":"string"},"includeHiddenCallGroups":{"type":"boolean"},"includeSuspendedUsers":{"type":"boolean"},"ivrKey":{"description":"Returns directory filtered by ivr key. Exact match only. As IVR Key is only assignable to teams, the result set will contain 1 matching team.\nThis parameter is incompatible with `extension` and `phoneNumber`","type":"string"},"limit":{"description":"The number of entries fetched per request","type":"string"},"next":{"description":"The pagination key for retrieving the next page of result set entries","type":"string"},"phoneNumber":{"description":"Returns directory filtered by phone number. Exact match only. The result set will return the directory entry with the assigned phone number.\nThis parameter is incompatible with `extension` and `ivrKey`","type":"string"}},"type":"object"},"SearchFilter":{"additionalProperties":false,"properties":{"includeAssigned":{"description":"Include assigned directory entries, e.g. assigned devices, trunk devices or trunk users\n\nDefaults to `\"false\"`","type":"string"},"includeHiddenCallGroups":{"description":"Include call groups where `isHidden` is `true`\n\nDefaults to `\"false\"`","type":"string"},"includeSuspendedUsers":{"description":"Include suspended users\n\nDefaults to `\"false\"`","type":"string"},"phonebook":{"description":"Filter by phonebook names\n\nComma-separated list of phonebook names","type":"string"},"type":{"description":"Filter by types\n\nComma-separated list of `DirectoryEntryTypeEnum` e.g. `user`, `team`, `device`, `contact`","type":"string"}},"type":"object"},"SearchRequest":{"additionalProperties":false,"properties":{"includeAssigned":{"description":"Include assigned directory entries, e.g. assigned devices, trunk devices or trunk users\n\nDefaults to `\"false\"`","type":"string"},"includeHiddenCallGroups":{"description":"Include call groups where `isHidden` is `true`\n\nDefaults to `\"false\"`","type":"string"},"includeSuspendedUsers":{"description":"Include suspended users\n\nDefaults to `\"false\"`","type":"string"},"phonebook":{"description":"Filter by phonebook names\n\nComma-separated list of phonebook names","type":"string"},"query":{"description":"Search query","type":"string"},"type":{"description":"Filter by types\n\nComma-separated list of `DirectoryEntryTypeEnum` e.g. `user`, `team`, `device`, `contact`","type":"string"}},"required":["query"],"type":"object"},"SearchableData":{"additionalProperties":false,"properties":{"searchableWeightA":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'A' (highest)","type":"string"},"searchableWeightB":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'B'","type":"string"},"searchableWeightC":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'C'","type":"string"},"searchableWeightD":{"description":"Contains searchable text that will be used to generate searchable `tsvector` columns with weight 'D' (lowest)","type":"string"}},"required":["searchableWeightA","searchableWeightB","searchableWeightC","searchableWeightD"],"type":"object"},"TrunkDeviceRequest":{"additionalProperties":false,"properties":{"externalId":{"description":"If provided, the external ID of the device to get","type":"string"},"id":{"description":"If provided, the ID of the device to get","type":"string"},"limit":{"description":"If provided, number of devices fetched per request","type":"string"},"next":{"description":"If provided, pagination for list of devices","type":"string"}},"type":"object"},"TrunkRequest":{"additionalProperties":false,"properties":{"externalId":{"description":"If provided, the external ID of the object to get","type":"string"},"externalType":{"description":"If provided, only objects of the given type will be fetched","type":"string"},"limit":{"description":"If provided, number of objects fetched per request","type":"string"},"next":{"description":"If provided, the pagination for list of objects belonging to the trunk","type":"string"},"trunkDeviceId":{"description":"If provided, the ID of the device to get","type":"string"},"trunkEntityId":{"description":"If provided, it can be trunkUserId, trunkDeviceId or trunkQueueId","type":"string"},"trunkId":{"description":"If provided, the ID of the trunk to get","type":"string"},"trunkQueueId":{"description":"If provided, the ID of the queue to get","type":"string"},"trunkUserId":{"description":"If provided, the ID of the user to get","type":"string"}},"type":"object"},"TrunkUserRequest":{"additionalProperties":false,"properties":{"externalId":{"description":"If provided, the external ID of the user to get","type":"string"},"id":{"description":"If provided, the ID of the user to get","type":"string"},"limit":{"description":"If provided, number of users fetched per request","type":"string"},"next":{"description":"If provided, pagination for list of users","type":"string"}},"type":"object"},"UpdateTrunkDeviceRequest":{"additionalProperties":false,"properties":{"description":{"description":"The device's description","nullable":true,"type":"string"},"externalId":{"type":"string"},"externalType":{"type":"string"},"location":{"description":"The device's location","nullable":true,"type":"string"},"model":{"description":"The device's model","nullable":true,"type":"string"},"name":{"description":"The device's name","type":"string"},"product":{"description":"The device's product","nullable":true,"type":"string"},"trunkDeviceId":{"type":"string"},"trunkId":{"type":"string"}},"required":["trunkId"],"type":"object"},"UpdateTrunkQueueRequest":{"additionalProperties":false,"properties":{"description":{"description":"The queue's description","nullable":true,"type":"string"},"externalId":{"type":"string"},"externalType":{"type":"string"},"name":{"description":"The queue's name","type":"string"},"trunkId":{"type":"string"},"trunkQueueId":{"type":"string"}},"required":["trunkId"],"type":"object"},"UpdateTrunkUserRequest":{"additionalProperties":false,"properties":{"assignToUserEmail":{"description":"The email of the Spoke user to assign this trunk user to.\nIgnored if `assignToUserId` is provided.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"assignToUserId":{"description":"The Spoke user ID of the user to assign this trunk user to.\nSetting this field to `null` will unassign the current owner.","nullable":true,"type":"string"},"department":{"description":"The user's department","nullable":true,"type":"string"},"description":{"description":"The user's description","nullable":true,"type":"string"},"emails":{"description":"The optional list of emails","items":{"$ref":"#/components/schemas/TrunkUserEmail"},"type":"array"},"externalId":{"type":"string"},"externalType":{"type":"string"},"fullName":{"description":"The user's full name","type":"string"},"jobTitle":{"description":"The user's job title","nullable":true,"type":"string"},"location":{"description":"The user's location","nullable":true,"type":"string"},"manager":{"description":"The user's manager","nullable":true,"type":"string"},"phoneNumbers":{"description":"The optional list of phone numbers","items":{"$ref":"#/components/schemas/TrunkUserPhoneNumber"},"type":"array"},"trunkId":{"type":"string"},"trunkUserId":{"type":"string"}},"required":["trunkId"],"type":"object"},"UpsertTrunkEntityRequest":{"additionalProperties":false,"properties":{"externalType":{"type":"string"},"trunkId":{"type":"string"}},"required":["trunkId"],"type":"object"},"ValidationResponse":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"valid":{"type":"boolean"}},"required":["valid"],"type":"object"},"_BaseDirectoryEntry":{"additionalProperties":false,"properties":{"entryData":{},"entryId":{"type":"string"},"entryType":{"$ref":"#/components/schemas/DirectoryEntryTypeEnum"},"sourceName":{"type":"string"},"sourceType":{"$ref":"#/components/schemas/DirectoryEntrySourceType"}},"required":["entryData","entryId","entryType","sourceType"],"type":"object"},"ContactKey":{"additionalProperties":false,"properties":{"contactId":{"type":"string"}},"required":["contactId"],"type":"object"},"ContactResponse":{"additionalProperties":false,"properties":{"data":{},"error":{"type":"string"},"success":{"type":"boolean"}},"required":["success"],"type":"object"},"EntityType":{"enum":["contact","phonebook"],"type":"string"},"GetContactByIdInput":{"additionalProperties":false,"properties":{"id":{"type":"string"},"phonebookId":{"type":"string"}},"required":["id","phonebookId"],"type":"object"},"InternalGetContactByIdInput":{"additionalProperties":false,"properties":{"contactId":{"type":"string"},"contactNumber":{"type":"string"},"organisationId":{"type":"string"}},"required":["contactId","organisationId"],"type":"object"},"PhonebookContactWriteEventRecord":{"additionalProperties":false,"properties":{"contact":{"$ref":"#/components/schemas/Contact"},"contactId":{"type":"string"},"event":{"$ref":"#/components/schemas/WriteEventEnum"},"eventId":{"type":"string"},"organisationId":{"type":"string"},"phonebookId":{"type":"string"},"phonebookName":{"type":"string"},"type":{"$ref":"#/components/schemas/EntityType"}},"required":["event","eventId","organisationId","phonebookId","phonebookName","type"],"type":"object"},"PhonebookRecord":{"additionalProperties":false,"properties":{"description":{"description":"The description of the phonebook","type":"string"},"managedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"managedByOwnerId":{"type":"string"},"name":{"description":"The name of the phonebook","type":"string"},"organisationId":{"type":"string"},"ownerId":{"type":"string"},"ownerType":{"$ref":"#/components/schemas/PhonebookOwnerType"},"phonebookId":{"type":"string"},"sourceId":{"description":"ID of the phonebook's source","type":"string"},"uploaded":{"description":"UTC timestamp of the latest upload time","type":"number"},"useExternalContactId":{"type":"boolean"}},"required":["managedBy","managedByOwnerId","name","organisationId","ownerId","ownerType","phonebookId","uploaded"],"type":"object"},"PhonebookResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"phonebook":{"$ref":"#/components/schemas/PhonebookRecord"},"success":{"type":"boolean"}},"required":["success"],"type":"object"},"Phonebooks":{"items":{"$ref":"#/components/schemas/Phonebook"},"type":"array"},"WriteEventEnum":{"enum":["create","delete","update"],"type":"string"},"Nullable_ContentAnalysisLensGroupIdentifiers_":{"anyOf":[{"$ref":"#/components/schemas/ContentAnalysisLensGroupIdentifiers"},{"nullable":true}]},"Record_string_Contact_":{"additionalProperties":false,"type":"object"},"Record_string_any_":{"additionalProperties":false,"type":"object"},"Record_string_string_":{"additionalProperties":false,"type":"object"},"RequireOnly_PhonebookOwner_id_":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"description":"The ID of the organisation\nThe unique ID of the user entry in the Spoke API","type":"string"},"type":{"const":"organisation","description":"The owner type of the phonebook. When this value is `organisation`, the phonebook is owned by the organisation and is accessible by all users from the\norganisation.","type":"string"}},"required":["id"],"type":"object"},{"additionalProperties":false,"properties":{"displayName":{"description":"The display name of the user entry in the Spoke directory. This field is equivalent to the `displayName` field for a user directory entry in the Spoke API.","type":"string"},"email":{"description":"The email address of the user entry in the Spoke directory.","type":"string"},"id":{"description":"The ID of the organisation\nThe unique ID of the user entry in the Spoke API","type":"string"},"type":{"const":"user","description":"The owner type of the phonebook. When this value is `user`, the phonebook is a personal phonebook owned by a user and is accessible only by the user.","type":"string"}},"required":["id"],"type":"object"}],"description":"Require the set of properties K in T, other properties become optional\nNOTE: Intersection types create allOf types in JSON definition"},"Omit_PhonebookWithContacts_meta_":{"additionalProperties":false,"properties":{"contacts":{"description":"The list of contacts belonging to the phonebook. May be empty if no matched contacts are found.","items":{"$ref":"#/components/schemas/Contact"},"type":"array"},"description":{"description":"The description of the phonebook","type":"string"},"id":{"description":"ID of the phonebook","type":"string"},"managedBy":{"$ref":"#/components/schemas/PhonebookManagedBy"},"name":{"description":"The name of the phonebook","type":"string"},"owner":{"$ref":"#/components/schemas/PhonebookOwner"},"ownerId":{"description":"** DEPRECATED **. Refer to `owner` field instead.","type":"string"},"sourceId":{"description":"ID of the phonebook's source","type":"string"},"uploaded":{"description":"UTC timestamp of the latest upload time","type":"number"}},"required":["contacts","id","managedBy","name","owner","ownerId","uploaded"],"type":"object"},"webhookId":{"type":"string"},"eventId":{"type":"string"},"status":{"type":"string"}}},"webhooks":{"call.answered":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.702Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.704Z","assignedContact":{},"assignedUser":{"email":"Albertha.Zieme@hotmail.com","firstName":"Demarcus","jobTitle":"Investor Accountability Engineer","lastName":"Morar","mobile":"+18436940879","userId":"bfeeb2d7-bdcc-43b7-882d-b2844bdd28be"},"companyNumber":"+10443234363","contactNumber":"+15413671317","direction":"inbound","directoryTarget":{"displayName":"Blanche Gleason","email":"Izabella_Fritsch88@hotmail.com","extension":6174120,"id":"3360da46-1818-48b2-a918-794974a79030","type":"user"},"forms":[],"highlights":[],"id":"3a654391-f73e-4961-bc55-5322c6927fa0","initiator":"+18310861047","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.703Z","lastModifiedTimestamp":1782944264703,"parties":[{"id":"+10561228866","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.703Z","joinedTimestamp":1782944264703,"vendorCallId":"CAFA87FC48D1D74D37A89385ACA447B4FD"}],"displayValue":"+1 242-691-8565"},{"id":"d0b20023-ca8b-4f52-8de6-fe3ada7a9f03","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.703Z","joinedTimestamp":1782944264703,"vendorCallId":"CA5332AECC65EF43B3811A3D3508EB66CD"}],"dials":[{"dialTimestamp":1782944264703,"dialAt":"2026-07-01T22:17:44.703Z","reason":"directDial"}],"extension":1345980,"email":"Lea.Schmeler@hotmail.com","displayValue":"Georgianna Barrows","timezone":"Europe/Dublin"}],"recipient":"53c8aed2-b006-4939-940b-78062f631b7c","recordings":[],"startedAt":"2026-07-01T22:17:44.703Z","startedTimestamp":1782944264703,"status":"started","summary":{"companyNumberDescription":"Called in to +13290146405","contactNumberDescription":"Called in from +14785907397","header":"Inbound call from +15505112167 to Melvin Macejkovic"},"user":{"email":"Penny_Carroll95@yahoo.com","firstName":"Juanita","jobTitle":"Senior Security Coordinator","lastName":"Barton","mobile":"+16785428430","userId":"dafed1e0-0d8f-4f74-b624-e8dc8714f0ac"},"vendor":"twilio","vendorCallId":"CA78924B230D4049E6984003BD7BF59DED","waitTime":13937,"waitTimeText":"a few seconds"}},"id":"e29a002a-273b-475c-b8b0-0a9ddb8ed237","timestamp":1782944264702,"type":"call.answered","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallAnsweredEvent"}}},"description":"Occurs whenever a party answers a call. A party could either be a Spoke User or an external contact, depending on whether the call `direction` is `inbound` or `outbound`.\n\nThis event may fire multiple times for a single call. For example, if a call is transferred from one user to another, then this event will fire for each user who has answered the call. To determine the most recent user who answered the call, check the `assignedUser` field in the `CallEventData` payload.\n\n> Note: This event does not fire for internal (user to user) calls or for Spoke conference calls.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.contact_assigned":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.720Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.722Z","assignedContact":{"companyName":"Bruen, Botsford and Rau","emails":[{"email":null,"label":"work"}],"firstName":"Jettie","id":"f0be9228-3c37-46b0-88aa-1c22698a7a4f","jobTitle":null,"lastName":"Braun-Reichert","phoneNumbers":[{"label":"work","numberRaw":"18005955433","numberE164":"+12481772369","numberDisplay":"+1 800-873-7230"},{"label":"mobile","numberRaw":"18771525836","numberE164":"+15381246723","numberDisplay":"+1 510-452-1545"}],"phonebookId":"d4c9ccab-8921-41c7-83f8-acfbfb917831","phonebookName":"tergiversatio vespillo"},"assignedUser":{"email":"Murphy.Krajcik72@hotmail.com","firstName":"Loyal","jobTitle":"Investor Web Strategist","lastName":"Harris","mobile":null,"userId":"5c404d90-a228-43c6-a7f9-2ba51800815a"},"companyNumber":"+16151773337","contactNumber":"+14317223864","direction":"outbound","forms":[],"highlights":[],"id":"13c3d75d-30de-4517-b79e-6461067d6a09","initiator":"681e281e-b376-48eb-a21e-ed1e1096e00f","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.721Z","lastModifiedTimestamp":1782944264721,"parties":[{"id":"e904934c-dd72-45eb-ad1c-cb48fd0a428b","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.721Z","joinedTimestamp":1782944264721,"vendorCallId":"CA29079A366E0646DD9A147CD4AD279552"}],"extension":8167525,"email":"Bill_Beer@gmail.com","displayValue":"Veda Brekke","timezone":"Pacific/Noumea"},{"id":"+16841803411","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.722Z","joinedTimestamp":1782944264722,"vendorCallId":"CA34251DC225984FCEA8D247230BFD7437"}],"dials":[{"dialTimestamp":1782944264722,"dialAt":"2026-07-01T22:17:44.722Z","reason":"directDial"}],"displayValue":"Ruthe Parisian"}],"recipient":"+10743336737","recordings":[],"startedAt":"2026-07-01T22:17:44.721Z","startedTimestamp":1782944264721,"status":"started","summary":{"companyNumberDescription":"Called out from +16701391754","contactNumberDescription":"Called out to +15138288771","header":"Outbound call to Teresa Altenwerth from Lowell Cremin"},"user":{"email":"Miguel_Cole-Howell72@gmail.com","firstName":"Maryam","jobTitle":"Dynamic Tactics Agent","lastName":"Gibson","mobile":null,"userId":"f2de80e5-f84b-4323-ad1f-43eac512e9ee"},"vendor":"twilio","vendorCallId":"CAECFAD7C24C774D009FB8434343B7285E","waitTime":5359,"waitTimeText":"a few seconds"}},"id":"fa3663d2-4631-4939-968c-e801547b5fe0","timestamp":1782944264720,"type":"call.contact_assigned","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallContactAssignedEvent"}}},"description":"Occurs whenever a contact is assigned to a call.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.contact_assigned_with_add":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.722Z","data":{"call":{"assignedCallGroup":{"displayName":"Marco Kuhlman","extension":4408083,"id":"180aef29-7b29-4821-b289-8917982dd858","type":"team"},"assignedContact":{"emails":[{"email":"Daphnee3@gmail.com"}],"firstName":"Kristie","lastName":"Metz","phoneNumbers":[{"numberRaw":"16537227788","numberE164":"+19915534440","numberDisplay":"+1 840-053-5983"}]},"assignedUser":{},"companyNumber":"+19935123546","contactNumber":"+15669028806","direction":"inbound","directoryTarget":{"displayName":"Aurelia Quitzon","extension":82281,"id":"5467068d-1800-4890-a704-609ef802eac9","type":"team"},"duration":59093,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.723Z","forms":[],"highlights":[],"id":"9f5d8db7-ecdd-4163-92b8-ab91aef674f9","initiator":"+11648178318","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.723Z","lastModifiedTimestamp":1782944264723,"outcome":{"reason":"noOneAvailable","status":"missed"},"parties":[{"id":"+11507397913","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.723Z","joinedTimestamp":1782944264723,"leftAt":"2026-07-01T22:17:44.723Z","leftTimestamp":1782944264723,"durationSec":59,"vendorCallId":"CAB9F526AC5E8B4519ADCC60F4C11323D5"}],"displayValue":"+1 563-487-8735"},{"id":"134afd58-887f-4107-9776-4454a93a7a7e","type":"user","isInternal":true,"dials":[{"dialTimestamp":1782944264723,"dialAt":"2026-07-01T22:17:44.723Z","reason":"callGroup"}],"extension":5182384,"email":"Eunice.Ziemann67@hotmail.com","displayValue":"Della Parker","timezone":"Africa/Niamey"},{"id":"db4c6971-9ae4-4414-9d90-cde55255bffe","type":"user","isInternal":true,"dials":[{"dialTimestamp":1782944264723,"dialAt":"2026-07-01T22:17:44.723Z","reason":"callGroup"}],"extension":8790407,"email":"Francis_Harvey51@hotmail.com","displayValue":"Miss Faith Johnson","timezone":"America/Guayaquil"},{"id":"39a6d635-31a7-4e89-9219-bfbf3d31f645","type":"user","isInternal":true,"dials":[{"dialTimestamp":1782944264723,"dialAt":"2026-07-01T22:17:44.723Z","reason":"callGroup"}],"extension":8303490,"email":"Marta96@yahoo.com","displayValue":"Margaret Wolf","timezone":"America/Miquelon"}],"recipient":"+16702340668","recordings":[],"startedAt":"2026-07-01T22:17:44.723Z","startedTimestamp":1782944264723,"status":"missed","summary":{"companyNumberDescription":"Called in to +14876480520","contactNumberDescription":"Called in from +19250598617","header":"Inbound call from Mrs. Henrietta Greenholt to +14927867833","outcome":"Missed call"},"user":{},"vendor":"twilio","vendorCallId":"CAC44B27BF9C354D33BFC58D6312E0EF9E","waitTime":59093,"waitTimeText":"a minute"}},"id":"6af4f9c4-14da-4bfe-af73-17dafa284a19","timestamp":1782944264722,"type":"call.contact_assigned_with_add","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallContactAssignedWithAddEvent"}}},"description":"**DEPRECATED**: This event has been deprecated and will be removed in a future version of the API. Please use the [`contact.shared` event](#tag/Contact-Events/paths/contact.shared/post) instead.\n\nOccurs whenever a contact is assigned to a call with the user specifying that they would like this user to be added to an externally connected system.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.contact_assigned_with_update":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.723Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.724Z","assignedContact":{"companyName":"Beatty LLC","emails":[{"email":"Jany.Parisian@hotmail.com","label":"work"}],"firstName":"Cecilia","id":"db683d69-8b1c-46bb-bd12-0714db382467","jobTitle":"Investor Data Engineer","lastName":"King","phoneNumbers":[{"label":"work","numberRaw":"18864249002","numberE164":"+19995968098","numberDisplay":"+1 550-685-9487"},{"numberRaw":"14378446391","numberE164":"+10892833178","numberDisplay":"+1 598-917-0076"}],"phonebookId":"5fcec2c1-e6ca-43e3-8a78-21da0a55c260","phonebookName":"comparo desparatus"},"assignedUser":{"email":"Pete_Fahey@yahoo.com","firstName":"Glenn","jobTitle":"Dynamic Mobility Consultant","lastName":"Stiedemann","mobile":null,"userId":"6b53e53b-b806-4b1c-8b01-a93b79691e8a"},"companyNumber":"+10040728386","contactNumber":"+15223782458","direction":"inbound","directoryTarget":{"displayName":"Jenna Conn","email":"Shawn.Volkman@yahoo.com","extension":1983869,"id":"821c7f81-e8fd-4679-bcc3-8cc532232cc0","type":"user"},"duration":62778,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.724Z","forms":[],"highlights":[],"id":"9f989485-5206-4a5a-9cef-dcb707d420fd","initiator":"+12392937463","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.724Z","lastModifiedTimestamp":1782944264724,"outcome":{"status":"answered"},"parties":[{"id":"+14830517250","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.725Z","joinedTimestamp":1782944264725,"leftAt":"2026-07-01T22:17:44.725Z","leftTimestamp":1782944264725,"durationSec":63,"vendorCallId":"CABC59E1CFAC8D4349ABBBC13EDCB18134"}],"displayValue":"+1 758-229-6723"},{"id":"d2dc6df3-8cb5-4a42-ada0-c83a5162a115","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.725Z","joinedTimestamp":1782944264725,"leftAt":"2026-07-01T22:17:44.725Z","leftTimestamp":1782944264725,"durationSec":20,"vendorCallId":"CA16DBF0AE6F2A43B6A85A0908DC00F412"}],"dials":[{"dialTimestamp":1782944264725,"dialAt":"2026-07-01T22:17:44.725Z","reason":"directDial"}],"extension":136871,"email":"Maegan55@yahoo.com","displayValue":"Dolly Krajcik","timezone":"America/Panama"},{"id":"8ffcfa78-99e8-477f-b0a4-8342383f7290","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.725Z","joinedTimestamp":1782944264725,"leftAt":"2026-07-01T22:17:44.725Z","leftTimestamp":1782944264725,"durationSec":8,"vendorCallId":"CAB228583D4F134A8A8E2BAA67683F7698"}],"dials":[{"dialTimestamp":1782944264725,"dialAt":"2026-07-01T22:17:44.725Z","reason":"transfer"}],"extension":6312613,"email":"Herman.Jones@gmail.com","displayValue":"Lola Wolff","timezone":"America/Goose_Bay"}],"recipient":"ed6ee893-0aaa-4809-b361-53b6bdb883ef","recordings":[],"startedAt":"2026-07-01T22:17:44.725Z","startedTimestamp":1782944264725,"status":"accepted","summary":{"companyNumberDescription":"Called in to +15828122855","contactNumberDescription":"Called in from +16313014965","header":"Inbound call from +13314505060 to Mr. Laverna Ledner","outcome":"Answered by Remington Grimes-Hintz. Transferred to Hattie Spinka DVM. Spoke for a minute"},"user":{"email":"Fred_Hamill9@gmail.com","firstName":"Shelley","jobTitle":"Senior Usability Administrator","lastName":"Hayes","mobile":"+11500359753","userId":"179d3cb7-97c6-4faa-b03a-d93834cce684"},"vendor":"twilio","vendorCallId":"CA9BF1093F309B44EAA954EEB990812BA6","waitTime":12180,"waitTimeText":"a few seconds"}},"id":"0d4ce5db-5c7d-450a-a6d3-eed54ae5d793","timestamp":1782944264723,"type":"call.contact_assigned_with_update","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallContactAssignedWithUpdateEvent"}}},"description":"**DEPRECATED**: This event has been deprecated and will be removed in a future version of the API. Please use the [`contact.shared` event](#tag/Contact-Events/paths/contact.shared/post) instead.\n\nOccurs whenever a contact is assigned to a call with the user specifying that they would like this user to be updated in an externally connected system.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.ended":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.708Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.709Z","assignedContact":{"companyName":"Cartwright, Jenkins and Konopelski","emails":[{"email":null,"label":"work"}],"firstName":"Shania","id":"618b8520-3cc7-4141-95aa-e9e99295146e","jobTitle":null,"lastName":"Brakus","phoneNumbers":[{"label":"work","numberRaw":"16248228466","numberE164":"+16423734758","numberDisplay":"+1 348-919-6638"},{"label":"mobile","numberRaw":"19904200533","numberE164":"+15176480245","numberDisplay":"+1 856-144-9242"}],"phonebookId":"ce905208-820d-40af-b539-fde6632883ac","phonebookName":"vomer abeo"},"assignedUser":{"email":"Elias.Blanda75@gmail.com","firstName":"Gertrude","jobTitle":"Human Interactions Officer","lastName":"Franey","mobile":null,"userId":"35b110c4-0346-4a96-bc21-b6b6186e99de"},"companyNumber":"+14940950532","contactNumber":"+13666144962","direction":"outbound","duration":76603,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.709Z","forms":[],"highlights":[],"id":"857d9b2c-5433-4d81-9e82-67775da7ffbb","initiator":"9c9fccc8-7301-44a3-825c-d1a7fb963e08","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.708Z","lastModifiedTimestamp":1782944264709,"outcome":{"status":"answered"},"parties":[{"id":"685893fa-bcf4-4c6c-82b8-d67089994f6a","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.709Z","joinedTimestamp":1782944264709,"leftAt":"2026-07-01T22:17:44.709Z","leftTimestamp":1782944264709,"durationSec":76,"vendorCallId":"CA655DD6AE046C450DB086F8D155B28C5D"}],"extension":8761555,"email":"Edna.Turcotte44@yahoo.com","displayValue":"Kelvin Heller","timezone":"America/Juneau"},{"id":"+14193386645","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.709Z","joinedTimestamp":1782944264709,"leftAt":"2026-07-01T22:17:44.709Z","leftTimestamp":1782944264709,"durationSec":70,"vendorCallId":"CABF07B50F3EF0440CA2C4D2193066D004"}],"dials":[{"dialTimestamp":1782944264709,"dialAt":"2026-07-01T22:17:44.709Z","reason":"directDial"}],"displayValue":"Elta Johnston"}],"recipient":"+18313939805","recordings":[],"startedAt":"2026-07-01T22:17:44.709Z","startedTimestamp":1782944264709,"status":"ended","summary":{"companyNumberDescription":"Called out from +10356139931","contactNumberDescription":"Called out to +11739580948","header":"Outbound call to Barbara Bode DDS from Mrs. Jesse Russel","outcome":"Spoke for a minute"},"user":{"email":"Wilbur.Schmeler51@gmail.com","firstName":"Whitney","jobTitle":"Direct Mobility Administrator","lastName":"O'Keefe","mobile":null,"userId":"f6a50b81-bca1-4567-a0d4-b55090de7e0c"},"vendor":"twilio","vendorCallId":"CAA9829643E4704B738675D7AE9000C7C4","waitTime":5359,"waitTimeText":"a few seconds"}},"id":"bd7fdc97-bbba-4a9c-9859-f38430e21d13","timestamp":1782944264708,"type":"call.ended","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallEndedEvent"}}},"description":"Occurs whenever a call ends.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.form.started":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.725Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.726Z","assignedContact":{},"assignedUser":{"email":"Thomas_Morissette45@gmail.com","firstName":"Elsie","jobTitle":"Regional Division Architect","lastName":"Dickens","mobile":"+10932952999","userId":"c59a71a0-60b6-4854-819a-e9818dbd19b4"},"companyNumber":"+13847178962","contactNumber":"+13680834936","direction":"inbound","directoryTarget":{"displayName":"Dr. Leon Morar Sr.","email":"Myrl30@gmail.com","extension":5999853,"id":"5bab21f7-a8e0-4402-840a-75f1c9ed053c","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.726Z","forms":[{"id":"3a98b855-93dc-4f6d-bc6c-04eb4ec5bb54","user":{"mobile":"+14490557818","firstName":"Colin","lastName":"Nitzsche","userId":"c2ecd035-3c2a-431e-94b9-d39013119484","email":"Hugo.Cremin25@hotmail.com","jobTitle":"Internal Factors Technician"},"name":"verbum tabesco","description":null,"reference":"ullus","type":"conversation","status":"started","startedAt":"2026-07-01T22:17:44.726Z","startedTimestamp":1782944264726}],"highlights":[{"recordingStartedTimestamp":1782944264726,"duration":30,"createdAt":"2026-07-01T22:17:44.726Z","durationText":"0:30","createdByUser":{"mobile":"+12027963709","firstName":"Kamryn","lastName":"Lind","userId":"4f9bad21-5773-47fc-bd14-4df3dd0045db","email":"Antoinette_Hessel@hotmail.com","jobTitle":"Global Data Administrator"},"recordingStartedAt":"2026-07-01T22:17:44.726Z","createdTimestamp":1782944264726,"id":"dc04fedf-5a9d-4e80-9a3a-0063c4682a06","tags":["veritatis"]},{"recordingStartedTimestamp":1782944264726,"duration":30,"createdAt":"2026-07-01T22:17:44.726Z","durationText":"0:30","createdByUser":{"mobile":"+13213180791","firstName":"Anna","lastName":"Moen","userId":"7f47e947-2e60-4c49-b43d-51e8ffaf03d2","email":"Christine68@hotmail.com","jobTitle":"Corporate Applications Engineer"},"recordingStartedAt":"2026-07-01T22:17:44.726Z","createdTimestamp":1782944264726,"id":"19855bb3-da5a-4716-8a3e-001a39243580","tags":["rem"]}],"id":"5c83d40d-14ae-475c-acf9-e90a65cfffde","initiator":"+10764194709","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.726Z","lastModifiedTimestamp":1782944264726,"outcome":{"status":"answered"},"parties":[{"id":"+11446049171","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.726Z","joinedTimestamp":1782944264726,"leftAt":"2026-07-01T22:17:44.726Z","leftTimestamp":1782944264726,"durationSec":71,"vendorCallId":"CA1FBF922BF6034D4EB16C5CC67CCB8794"}],"displayValue":"+1 914-681-9686"},{"id":"22e2798e-b8a5-45f6-88fe-aa7207cf417d","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.726Z","joinedTimestamp":1782944264726,"leftAt":"2026-07-01T22:17:44.726Z","leftTimestamp":1782944264726,"durationSec":55,"vendorCallId":"CAF6632294290C48AAAAE0D021E7D74011"}],"dials":[{"dialTimestamp":1782944264726,"dialAt":"2026-07-01T22:17:44.726Z","reason":"directDial"}],"extension":4765670,"email":"Jackie64@yahoo.com","displayValue":"Bill Turner","timezone":"Pacific/Gambier"}],"recipient":"f18b1ac5-901b-4a31-b4ef-45a5f579b775","recordings":[{"id":"c0f36aed-34a9-4660-ab75-192e9438885c","callId":"5c83d40d-14ae-475c-acf9-e90a65cfffde","fileSize":865,"duration":572,"startedAt":"2026-07-01T22:17:44.726Z","mimeType":"audio/wav","channels":2}],"startedAt":"2026-07-01T22:17:44.726Z","startedTimestamp":1782944264726,"status":"ended","summary":{"companyNumberDescription":"Called in to +17036507643","contactNumberDescription":"Called in from +13960289979","header":"Inbound call from +10126159154 to Mrs. Samantha Beahan","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+17279023532","recipient":"+10763729055","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA482EC0BF784546B9B7C3D3E0FCD474DE","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:bd8f15ab_cbab_49be_bac0_35e29e47ede7","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CAB838F48F48914435B666BC1423369897","direction":"outbound"}],"total":0},"user":{"email":"Nicole_VonRueden81@gmail.com","firstName":"Elsie","jobTitle":"Corporate Quality Administrator","lastName":"Hickle","mobile":"+10980406534","userId":"bb06bf10-5b4b-4a74-ab9e-1a9615fdcdf4"},"vendor":"twilio","vendorCallId":"CA2F399C84B9754A7FBA35E9F443316486","waitTime":13937,"waitTimeText":"a few seconds"},"form":{"description":null,"id":"3a98b855-93dc-4f6d-bc6c-04eb4ec5bb54","name":"verbum tabesco","reference":"ullus","startedAt":"2026-07-01T22:17:44.726Z","startedTimestamp":1782944264726,"status":"started","type":"conversation","user":{"email":"Hugo.Cremin25@hotmail.com","firstName":"Colin","jobTitle":"Internal Factors Technician","lastName":"Nitzsche","mobile":"+14490557818","userId":"c2ecd035-3c2a-431e-94b9-d39013119484"}}},"id":"b3fde7b9-a891-414a-a525-e2eb8c59c9d0","timestamp":1782944264725,"type":"call.form.started","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallFormStartedEvent"}}},"description":"Signifies that a user has selected a custom form to enter data relating to the call.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.form.submitted":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.727Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.728Z","assignedContact":{},"assignedUser":{"email":"Santos66@gmail.com","firstName":"Javonte","jobTitle":"Product Metrics Supervisor","lastName":"Cronin","mobile":"+11247551979","userId":"dec7a139-a452-4e1d-abf5-70e02c71a882"},"companyNumber":"+17953023737","contactNumber":"+19849622511","direction":"inbound","directoryTarget":{"displayName":"Derrick Schmitt","email":"Courtney_Hirthe@yahoo.com","extension":3287770,"id":"47634b0c-9d29-4448-9b08-6ed0fc29ef0d","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.729Z","forms":[{"id":"09882c81-4025-458c-a51f-fe350e9f98a3","user":{"mobile":"+14902851042","firstName":"Chelsea","lastName":"Hegmann","userId":"f8f6e58a-9ddf-41be-a75e-630fc24e128c","email":"Carole_Orn60@yahoo.com","jobTitle":"Regional Response Officer"},"name":"teres caecus","description":null,"reference":"degenero","type":"conversation","status":"started","startedAt":"2026-07-01T22:17:44.728Z","startedTimestamp":1782944264728,"submittedAt":"2026-07-01T22:17:44.728Z","submittedTimestamp":1782944264728,"formData":{"firstName":"Bennie","lastName":"Jacobson","phoneNumber":"+14202658841","accidentDate":"2024-02-01","accidentTime":"08:25:00","accidentDesc":"Adflicto vindico vulpes trans atrox alter alo confugo stultus. Demens tactus ullam. Vinco similique antepono avaritia voveo comparo verbera. Caelestis adinventitias tutamen atque conservo tametsi officiis termes atqui.","mainDriver":"Yes","accidentCarLocation":["Rear"],"repairsEstimate":"$100000"}}],"highlights":[{"recordingStartedTimestamp":1782944264728,"duration":30,"createdAt":"2026-07-01T22:17:44.728Z","durationText":"0:30","createdByUser":{"mobile":"+16379972984","firstName":"Mitchel","lastName":"Botsford","userId":"27b6be09-b58b-40e4-b40f-83e2db4360a5","email":"Polly52@hotmail.com","jobTitle":"Customer Accounts Representative"},"recordingStartedAt":"2026-07-01T22:17:44.729Z","createdTimestamp":1782944264729,"id":"4c2757fb-f134-4056-b7d0-628854d88c9a","tags":["repellendus"]},{"recordingStartedTimestamp":1782944264729,"duration":30,"createdAt":"2026-07-01T22:17:44.729Z","durationText":"0:30","createdByUser":{"mobile":"+15412589615","firstName":"Austin","lastName":"Gutkowski","userId":"0aab1cba-3365-472e-a3ed-96ddc3b13e53","email":"Clyde.Dach@hotmail.com","jobTitle":"Senior Implementation Orchestrator"},"recordingStartedAt":"2026-07-01T22:17:44.729Z","createdTimestamp":1782944264729,"id":"164e4983-a14c-41de-965c-3dd7596d39e8","tags":["tot"]}],"id":"fd6c633f-2729-488f-b5f3-b479a2a7a264","initiator":"+15530801787","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.728Z","lastModifiedTimestamp":1782944264728,"outcome":{"status":"answered"},"parties":[{"id":"+11683088383","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.729Z","joinedTimestamp":1782944264729,"leftAt":"2026-07-01T22:17:44.729Z","leftTimestamp":1782944264729,"durationSec":71,"vendorCallId":"CA2862107D771445048B0113241F1C1E9C"}],"displayValue":"+1 392-606-7697"},{"id":"86f54fdb-f266-43a9-9f94-b643ec0cea02","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.729Z","joinedTimestamp":1782944264729,"leftAt":"2026-07-01T22:17:44.729Z","leftTimestamp":1782944264729,"durationSec":55,"vendorCallId":"CAF20FF8121C6D414DA0466F93FB600773"}],"dials":[{"dialTimestamp":1782944264729,"dialAt":"2026-07-01T22:17:44.729Z","reason":"directDial"}],"extension":8620444,"email":"Vanessa_Hilpert7@yahoo.com","displayValue":"Roman Sipes","timezone":"America/St_Lucia"}],"recipient":"21d8732f-65b9-4b10-bbcb-b4f8813cd080","recordings":[{"id":"342d9210-f85a-4ce7-90f2-4687fd668bc3","callId":"fd6c633f-2729-488f-b5f3-b479a2a7a264","fileSize":776,"duration":989,"startedAt":"2026-07-01T22:17:44.729Z","mimeType":"audio/mpeg","channels":2}],"startedAt":"2026-07-01T22:17:44.728Z","startedTimestamp":1782944264728,"status":"ended","summary":{"companyNumberDescription":"Called in to +17091394852","contactNumberDescription":"Called in from +18330743618","header":"Inbound call from +17543296139 to Robin Torphy","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+12961674320","recipient":"+19553703688","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA59AEE84598D647438057C525F7770242","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:2cf63a1f_b6bb_4587_9b2f_fd1b32a40706","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CA7CD5CE6BBDFC4EE4B945078B2745C202","direction":"outbound"}],"total":0},"user":{"email":"Rosemarie_Maggio@hotmail.com","firstName":"Melody","jobTitle":"Direct Operations Architect","lastName":"Ondricka","mobile":"+17869796015","userId":"5501a6bc-0f16-44d2-bf5e-68f47bfc5992"},"vendor":"twilio","vendorCallId":"CA7E7198CBB94B4D8ABF1F43DC09A80F02","waitTime":13937,"waitTimeText":"a few seconds"},"form":{"description":null,"formData":{"accidentCarLocation":["Rear"],"accidentDate":"2024-02-01","accidentDesc":"Adflicto vindico vulpes trans atrox alter alo confugo stultus. Demens tactus ullam. Vinco similique antepono avaritia voveo comparo verbera. Caelestis adinventitias tutamen atque conservo tametsi officiis termes atqui.","accidentTime":"08:25:00","firstName":"Bennie","lastName":"Jacobson","mainDriver":"Yes","phoneNumber":"+14202658841","repairsEstimate":"$100000"},"id":"09882c81-4025-458c-a51f-fe350e9f98a3","name":"teres caecus","reference":"degenero","startedAt":"2026-07-01T22:17:44.728Z","startedTimestamp":1782944264728,"status":"started","submittedAt":"2026-07-01T22:17:44.728Z","submittedTimestamp":1782944264728,"type":"conversation","user":{"email":"Carole_Orn60@yahoo.com","firstName":"Chelsea","jobTitle":"Regional Response Officer","lastName":"Hegmann","mobile":"+14902851042","userId":"f8f6e58a-9ddf-41be-a75e-630fc24e128c"}}},"id":"67ae9124-b2fb-4a74-b91d-831f160d7e72","timestamp":1782944264727,"type":"call.form.submitted","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallFormSubmittedEvent"}}},"description":"Signifies that a user has completed entering data relating to a call and has submitted the form.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.highlight.created":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.717Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.718Z","assignedContact":{},"assignedUser":{"email":"Jesus_Kiehn7@hotmail.com","firstName":"Joyce","jobTitle":"Investor Accountability Specialist","lastName":"Rutherford","mobile":"+10309327523","userId":"16e7ab19-59eb-485a-9c14-f1ca4b75c9df"},"companyNumber":"+18742481801","contactNumber":"+12778274316","direction":"inbound","directoryTarget":{"displayName":"Alysson Dibbert","email":"Melisa_Pagac@gmail.com","extension":2240607,"id":"5da4884c-20b3-4db9-b542-036f8704e258","type":"user"},"forms":[],"highlights":[{"createdAt":"2026-07-01T22:17:44.718Z","id":"8f4c14dc-5bdd-4c6e-ad3d-82ae62011876","createdByUser":{"userId":"810128de-367c-4646-a09c-6fa8135cd4d3","firstName":"Charlene","lastName":"Hudson","mobile":"+17949698457","email":"Colleen_Keebler-Morissette@gmail.com","jobTitle":"Legacy Identity Executive"},"createdTimestamp":1782944264718,"tags":["sol"]},{"id":"7b9e2ccb-25cc-42cb-b13d-267211603118","createdAt":"2026-07-01T22:17:44.717Z","createdTimestamp":1782944264717,"createdByUser":{"userId":"3944ab21-39b2-4a92-8836-b2e25e415acc","firstName":"Xander","lastName":"Sanford","mobile":"+10335546229","email":"Tiana_DuBuque@yahoo.com","jobTitle":"Senior Functionality Officer"},"tags":["tricesimus"]}],"id":"29f639ba-c717-4206-8aee-a8f39f2591a9","initiator":"+11187581639","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.717Z","lastModifiedTimestamp":1782944264718,"parties":[{"id":"+10952303838","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.718Z","joinedTimestamp":1782944264718,"vendorCallId":"CAB67BCEA7954B436A82A130D29FD8A202"}],"displayValue":"+1 651-329-2563"},{"id":"b9225390-e1f3-4251-9189-072c78d467b2","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.718Z","joinedTimestamp":1782944264718,"vendorCallId":"CA964BBBA27B7241D197B474733C159065"}],"dials":[{"dialTimestamp":1782944264718,"dialAt":"2026-07-01T22:17:44.718Z","reason":"directDial"}],"extension":5124357,"email":"Viviane_Larkin@gmail.com","displayValue":"Allen Koss","timezone":"America/Phoenix"}],"recipient":"85c24808-8372-4248-852c-daf79b0b3748","recordings":[],"startedAt":"2026-07-01T22:17:44.718Z","startedTimestamp":1782944264718,"status":"started","summary":{"companyNumberDescription":"Called in to +14604913957","contactNumberDescription":"Called in from +15387876620","header":"Inbound call from +11213685608 to David Stamm"},"user":{"email":"Elvie.King82@gmail.com","firstName":"Jordan","jobTitle":"Central Solutions Supervisor","lastName":"Brekke","mobile":"+16080139683","userId":"e05ab92c-ac3e-40fd-b70e-ef4691189ed3"},"vendor":"twilio","vendorCallId":"CA249E9EA70D2544B685BBFE771C8A6361","waitTime":13937,"waitTimeText":"a few seconds"},"highlight":{"createdAt":"2026-07-01T22:17:44.717Z","createdByUser":{"email":"Tiana_DuBuque@yahoo.com","firstName":"Xander","jobTitle":"Senior Functionality Officer","lastName":"Sanford","mobile":"+10335546229","userId":"3944ab21-39b2-4a92-8836-b2e25e415acc"},"createdTimestamp":1782944264717,"id":"7b9e2ccb-25cc-42cb-b13d-267211603118","tags":["tricesimus"]}},"id":"8b65033c-199a-402c-9d78-c1bba76e98a7","timestamp":1782944264717,"type":"call.highlight.created","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallHighlightCreatedEvent"}}},"description":"Occurs whenever a user presses the highlight button in a call.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.highlight.recording_available":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.718Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.720Z","assignedContact":{},"assignedUser":{"email":"Arely69@yahoo.com","firstName":"Isaac","jobTitle":"Future Creative Supervisor","lastName":"Schmidt","mobile":"+18593732123","userId":"9f03b520-1e45-4925-af83-72905bf87af4"},"companyNumber":"+19148985576","contactNumber":"+19759610698","direction":"inbound","directoryTarget":{"displayName":"Rebeca Muller","email":"Ellen_Wilkinson74@gmail.com","extension":3867062,"id":"f31bc0ae-dafc-4a34-8c59-d596db8114cf","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.720Z","forms":[],"highlights":[{"recordingStartedTimestamp":1782944264720,"duration":30,"createdAt":"2026-07-01T22:17:44.720Z","durationText":"0:30","createdByUser":{"mobile":"+10938288724","firstName":"Latoya","lastName":"Reichert","userId":"60a14ab6-a395-488a-adf6-19108dd4f9bd","email":"Ella_Keeling@gmail.com","jobTitle":"Dynamic Accountability Liaison"},"recordingStartedAt":"2026-07-01T22:17:44.720Z","createdTimestamp":1782944264720,"id":"6edb1989-c6de-4af2-9611-43c76ace7740","tags":["studio"]},{"id":"019a6da7-558a-45d7-b21f-3d5a46190540","createdByUser":{"mobile":"+17688919219","firstName":"Russell","lastName":"MacGyver","userId":"1ebd3bd8-2683-43ab-84d5-c5ac848b7297","email":"Candace37@gmail.com","jobTitle":"Internal Infrastructure Facilitator"},"createdAt":"2026-07-01T22:17:44.720Z","createdTimestamp":1782944264720,"tags":["vetus"]}],"id":"a9a5469f-6e2f-4aaa-b5ea-177fe68512b5","initiator":"+17012942298","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.720Z","lastModifiedTimestamp":1782944264720,"outcome":{"status":"answered"},"parties":[{"id":"+18471730039","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.720Z","joinedTimestamp":1782944264720,"leftAt":"2026-07-01T22:17:44.720Z","leftTimestamp":1782944264720,"durationSec":71,"vendorCallId":"CA46D46575FB294C67B3BB606C41078810"}],"displayValue":"+1 221-738-5984"},{"id":"21c42fb4-528d-47b3-96b4-efa0b3ee96af","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.720Z","joinedTimestamp":1782944264720,"leftAt":"2026-07-01T22:17:44.720Z","leftTimestamp":1782944264720,"durationSec":55,"vendorCallId":"CA80E2C230C7E74BA48988AE975CDB55BD"}],"dials":[{"dialTimestamp":1782944264720,"dialAt":"2026-07-01T22:17:44.720Z","reason":"directDial"}],"extension":31061,"email":"Kelvin79@hotmail.com","displayValue":"Lexi Collins","timezone":"Europe/Rome"}],"recipient":"f4124eca-ccaa-4cc6-8c18-37bd30931ceb","recordings":[{"id":"693b9b11-8646-4a36-90d9-ba0e0438cd9b","callId":"a9a5469f-6e2f-4aaa-b5ea-177fe68512b5","fileSize":690,"duration":398,"startedAt":"2026-07-01T22:17:44.720Z","mimeType":"audio/wav","channels":1}],"startedAt":"2026-07-01T22:17:44.720Z","startedTimestamp":1782944264720,"status":"ended","summary":{"companyNumberDescription":"Called in to +11090949755","contactNumberDescription":"Called in from +14978874140","header":"Inbound call from +19803390366 to Quinton Davis","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+10881511178","recipient":"+12108568604","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA154DEDEF0F6F4693A869B07374157437","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:dcacb5a3_0b91_4f29_b95a_0cf4e6c8f0bf","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CAF956F6E8F5874AF69DA357A76A8CF5ED","direction":"outbound"}],"total":0},"user":{"email":"Tyrell.White96@hotmail.com","firstName":"Faith","jobTitle":"Legacy Infrastructure Engineer","lastName":"Lubowitz","mobile":"+16802895425","userId":"1f1b7c0d-99ee-4d25-8579-59846bf67ade"},"vendor":"twilio","vendorCallId":"CA5AB44403B97449B9B664FF5EE4FEEAB7","waitTime":13937,"waitTimeText":"a few seconds"},"highlight":{"createdAt":"2026-07-01T22:17:44.719Z","createdByUser":{"email":"Emilio.Feil@gmail.com","firstName":"Leah","jobTitle":"Global Web Architect","lastName":"Hansen","mobile":"+16897430647","userId":"6f584d73-d2de-4226-b068-969c087067fe"},"createdTimestamp":1782944264719,"duration":30,"durationText":"0:30","id":"03fd622a-8998-487e-8e2b-6682a542e037","recordingStartedAt":"2026-07-01T22:17:44.720Z","recordingStartedTimestamp":1782944264720,"recordingUrl":"https://ample-steak.com/","recordingUrlExpiresTimestamp":1782944264720,"tags":["deputo"]}},"id":"ee8d631c-0a63-4dc8-8c85-35f99bd62e57","timestamp":1782944264718,"type":"call.highlight.recording_available","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallHighlightRecordingAvailableEvent"}}},"description":"Occurs whenever the recording for the highlight is available.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.hungup":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.706Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.707Z","assignedContact":{"companyName":"Friesen LLC","emails":[{"email":null,"label":"work"}],"firstName":"Wilbur","id":"05416097-5fca-4ea5-83e1-28b9392d41e7","jobTitle":null,"lastName":"Nikolaus","phoneNumbers":[{"label":"work","numberRaw":"10501405463","numberE164":"+10401845478","numberDisplay":"+1 256-609-1917"},{"label":"mobile","numberRaw":"10159776436","numberE164":"+17464954548","numberDisplay":"+1 684-740-3256"}],"phonebookId":"d2082667-8457-4ad0-8e27-1841b501b15e","phonebookName":"bestia depopulo"},"assignedUser":{"email":"Antonio.Thiel@gmail.com","firstName":"Alysa","jobTitle":"Regional Web Orchestrator","lastName":"Schiller","mobile":null,"userId":"f7b2a97b-e71b-4f7b-9290-08fbbbc7d545"},"companyNumber":"+16013082894","contactNumber":"+10626989113","direction":"outbound","forms":[],"highlights":[],"id":"223b344b-9797-4cb2-a62e-7114864461d9","initiator":"4976fbbc-dbd8-4316-ba1d-48df14aa6355","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.706Z","lastModifiedTimestamp":1782944264707,"parties":[{"id":"e77c01ef-4607-46c0-a129-9e7e5233a906","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.707Z","joinedTimestamp":1782944264707,"leftAt":"2026-07-01T22:17:44.707Z","leftTimestamp":1782944264707,"durationSec":77,"vendorCallId":"CA76F5749CCA5342A8AF961EF71986BFA8"}],"extension":6897229,"email":"Calvin_Skiles@yahoo.com","displayValue":"Omar Steuber-Gibson","timezone":"Atlantic/Cape_Verde"},{"id":"+19345803982","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.707Z","joinedTimestamp":1782944264707,"leftAt":"2026-07-01T22:17:44.707Z","leftTimestamp":1782944264707,"durationSec":70,"vendorCallId":"CA0D0C9F477B2D42F4ACE4BCFA06D3E67E"}],"dials":[{"dialTimestamp":1782944264707,"dialAt":"2026-07-01T22:17:44.707Z","reason":"directDial"}],"displayValue":"Miss Osborne Hoeger"}],"recipient":"+12969360496","recordings":[],"startedAt":"2026-07-01T22:17:44.707Z","startedTimestamp":1782944264707,"status":"started","summary":{"companyNumberDescription":"Called out from +11806368984","contactNumberDescription":"Called out to +17058000458","header":"Outbound call to Dr. Mabel Batz from Antwon Marquardt","outcome":"Spoke for a minute"},"user":{"email":"Adrienne.Hilll@gmail.com","firstName":"Isai","jobTitle":"District Implementation Facilitator","lastName":"Feil","mobile":null,"userId":"86c640fc-1d1b-4574-b41f-2c7665a44d20"},"vendor":"twilio","vendorCallId":"CA9368F364F9F140FF84623D3B73B588F6","waitTime":5359,"waitTimeText":"a few seconds"}},"id":"d7d4c852-474b-478c-9d44-655d4119675a","timestamp":1782944264706,"type":"call.hungup","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallHungupEvent"}}},"description":"Occurs whenever a call party hangs up. This event fires each time a party leaves the call.\n\n> Note: This event does not fire for internal (user to user) calls or for Spoke conference calls.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.not_answered":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.704Z","data":{"call":{"assignedContact":{},"assignedUser":{},"companyNumber":"+14935475844","contactNumber":"+17935086300","direction":"inbound","directoryTarget":{"displayName":"Sammy Ratke","email":"Abbigail37@gmail.com","extension":9649626,"id":"ec694ce4-97ea-4089-9e45-a8fc2750a3b0","type":"user"},"forms":[],"highlights":[],"id":"a3935e22-4339-4629-b217-34188d768c6c","initiator":"+17474461432","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.705Z","lastModifiedTimestamp":1782944264705,"parties":[{"id":"+12526413937","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.705Z","joinedTimestamp":1782944264705,"vendorCallId":"CACB41477D38E14F26B3A19351650851BA"}],"displayValue":"+1 500-946-1370"},{"id":"b7affe8e-1cd0-4168-aae1-3a706087ab74","type":"user","isInternal":true,"dials":[{"dialTimestamp":1782944264705,"dialAt":"2026-07-01T22:17:44.705Z","reason":"directDial"}],"extension":8506415,"email":"Kaycee.Mante73@gmail.com","displayValue":"Troy Dietrich","timezone":"Atlantic/Azores"}],"recipient":"48b12c88-3108-44f9-b840-549e1166b630","recordings":[],"startedAt":"2026-07-01T22:17:44.705Z","startedTimestamp":1782944264705,"status":"started","summary":{"companyNumberDescription":"Called in to +18031066468","contactNumberDescription":"Called in from +18010594511","header":"Inbound call from +17109152029 to Stacey Treutel IV"},"user":{},"vendor":"twilio","vendorCallId":"CACA4492394E70436B9217DC014FD1F078"}},"id":"455bf4cb-9799-4f91-8f72-280e7351a6e7","timestamp":1782944264704,"type":"call.not_answered","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallNotAnsweredEvent"}}},"description":"Occurs whenever a call goes unanswered:\n\n1. For an inbound call to a Spoke team, this event will fire when the call is unanswered, and goes to voicemail or rolls over to another group\n2. For an inbound call to a Spoke user or device, this event will fire when the user rejects the call *OR* if the call goes to voicemail\n3. For an outbound call to a contact, this event will fire if the party rejects the call and the call does not go to voicemail. If the call goes to voicemail then the call is treated as answered, and a `call.answered` event will be fired instead.\n\n> Note: This event does not fire for internal (user to user) calls or for Spoke conference calls.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.note.created":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.715Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.716Z","assignedContact":{"companyName":null,"contactId":"b306b66a-37d4-48d7-a40d-ffdbfa0e94ba","emails":[{"email":null,"label":"work"},{"email":null,"label":"personal"}],"firstName":"Macy","id":"6f970c5b-70b8-40b2-bf36-02cdc170da16","jobTitle":null,"lastName":"Kreiger","phoneNumbers":[{"numberRaw":"16849736397","label":"work","numberE164":"+13756552195","numberDisplay":"+1 150-441-9314"}],"phonebookId":"017fd337-adea-4691-a5b4-a206de80485f","phonebookName":"Fundamental mobile internet solution"},"assignedUser":{"email":"Courtney.McDermott@gmail.com","firstName":"Gust","jobTitle":"Product Quality Specialist","lastName":"Kris","mobile":null,"userId":"9af7f916-eeac-4cd8-a4ef-5e4e44dcab98"},"companyNumber":"+11019701666","contactNumber":"+16798784783","direction":"outbound","duration":39574,"durationText":"a few seconds","endedAt":"2026-07-01T22:17:44.716Z","forms":[],"highlights":[],"id":"b72b4276-7c5b-4d87-ae77-f0e23ecc9fa5","initiator":"4d87bea5-137d-41c2-9d5d-a821fc468081","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.716Z","lastModifiedTimestamp":1782944264716,"notes":[{"id":"b37ca5dc-04e4-4b33-8dea-e303f22f92ed","noteText":"Adhuc synagoga adsidue atavus vinitor balbus repellat amitto. Adnuo creber utrum canto thymbra peccatus adsidue demitto appositus. Timor recusandae cur vado tergiversatio vomito curvo. Summopere ago cruentus ullus thesis sit balbus cotidie tondeo vespillo. Voluntarius cresco voluptates amor ancilla.","noteContents":[{"transcribedAt":"2026-07-01T22:17:44.716Z","transcribedTimestamp":1782944264716,"transcriptionConfidence":1,"content":"Adhuc synagoga adsidue atavus vinitor balbus repellat amitto. Adnuo creber utrum canto thymbra peccatus adsidue demitto appositus. Timor recusandae cur vado tergiversatio vomito curvo. Summopere ago cruentus ullus thesis sit balbus cotidie tondeo vespillo. Voluntarius cresco voluptates amor ancilla."}],"createdByUser":{"mobile":null,"firstName":"Taylor","lastName":"O'Connell","userId":"6107a84f-7396-42d1-b25d-1d70e133ba64","email":"Zella_Gusikowski@gmail.com","jobTitle":"Senior Metrics Producer"},"createdAt":"2026-07-01T22:17:44.716Z","createdTimestamp":1782944264716}],"outcome":{"status":"answered"},"parties":[{"isInternal":true,"displayValue":"Santos Jones","extension":4114105,"id":"03d28019-b762-4020-8f96-01cf800afb55","type":"user","connections":[{"joinedTimestamp":1782944264716,"leftAt":"2026-07-01T22:17:44.716Z","leftTimestamp":1782944264716,"durationSec":39,"vendorCallId":"CA7BC0A3A557FB4FE68C7A85C1D49F925D","joinedAt":"2026-07-01T22:17:44.716Z"}],"email":"Bernadette.Nader@yahoo.com","timezone":"Pacific/Chuuk"},{"isInternal":false,"displayValue":"Angus Lindgren","dials":[{"dialTimestamp":1782944264716,"reason":"directDial","dialAt":"2026-07-01T22:17:44.716Z"}],"id":"+13811698753","type":"phone","connections":[{"joinedTimestamp":1782944264716,"leftAt":"2026-07-01T22:17:44.716Z","leftTimestamp":1782944264716,"durationSec":36,"vendorCallId":"CAC3C06AEF2B114598BD1150E92385D013","joinedAt":"2026-07-01T22:17:44.716Z"}]}],"recipient":"+10738839143","recordings":[],"startedAt":"2026-07-01T22:17:44.716Z","startedTimestamp":1782944264716,"status":"ended","summary":{"companyNumberDescription":"Called out from +13277891087","contactNumberDescription":"Called out to +19862219907","header":"Outbound call to Ray Konopelski V from Mandy Smith","outcome":"Spoke for a few seconds"},"user":{"email":"Emmett55@hotmail.com","firstName":"Elaine","jobTitle":"Product Identity Manager","lastName":"Roberts","mobile":null,"userId":"7f46e6ec-248b-475a-b04e-25dac0bcd33b"},"vendor":"twilio","vendorCallId":"CA04006A86D322463597D8D9ECE68A0DA6","waitTime":2347,"waitTimeText":"a few seconds"},"note":{"createdAt":"2026-07-01T22:17:44.716Z","createdByUser":{"email":"Zella_Gusikowski@gmail.com","firstName":"Taylor","jobTitle":"Senior Metrics Producer","lastName":"O'Connell","mobile":null,"userId":"6107a84f-7396-42d1-b25d-1d70e133ba64"},"createdTimestamp":1782944264716,"id":"b37ca5dc-04e4-4b33-8dea-e303f22f92ed","noteContents":[{"transcribedAt":"2026-07-01T22:17:44.716Z","transcribedTimestamp":1782944264716,"transcriptionConfidence":1,"content":"Adhuc synagoga adsidue atavus vinitor balbus repellat amitto. Adnuo creber utrum canto thymbra peccatus adsidue demitto appositus. Timor recusandae cur vado tergiversatio vomito curvo. Summopere ago cruentus ullus thesis sit balbus cotidie tondeo vespillo. Voluntarius cresco voluptates amor ancilla."}],"noteText":"Adhuc synagoga adsidue atavus vinitor balbus repellat amitto. Adnuo creber utrum canto thymbra peccatus adsidue demitto appositus. Timor recusandae cur vado tergiversatio vomito curvo. Summopere ago cruentus ullus thesis sit balbus cotidie tondeo vespillo. Voluntarius cresco voluptates amor ancilla."}},"id":"589a7281-0b31-4946-b0db-4cce4ae080f0","timestamp":1782944264715,"type":"call.note.created","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallNoteCreatedEvent"}}},"description":"Occurs whenever a user creates a new note for a call.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.recording.available":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.709Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.711Z","assignedContact":{},"assignedUser":{"email":"Tara_Hagenes@hotmail.com","firstName":"Jaron","jobTitle":"National Directives Strategist","lastName":"Stoltenberg","mobile":"+15087691849","userId":"dd4b7cd8-e88d-44a7-bf18-73a077f99b3c"},"companyNumber":"+12224622459","contactNumber":"+15965405143","direction":"inbound","directoryTarget":{"displayName":"Miss Eileen Douglas-Feeney","email":"Leonora.Schuster-Grady@gmail.com","extension":6000263,"id":"91ac4094-7b25-4485-8f14-825f82aa955e","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.711Z","forms":[],"highlights":[{"createdAt":"2026-07-01T22:17:44.711Z","id":"026a0506-d0fa-4adc-b59b-5ec8fee47801","createdByUser":{"mobile":"+10589268915","firstName":"Rafael","lastName":"Hahn","userId":"923ab31d-df12-472a-9752-64d77ed94d9d","email":"Don_Vandervort49@gmail.com","jobTitle":"Dynamic Data Producer"},"createdTimestamp":1782944264711,"tags":["clibanus"]},{"createdAt":"2026-07-01T22:17:44.711Z","id":"2fe6bef3-ac85-4e36-91f0-fd9b58af8e78","createdByUser":{"mobile":"+10035378676","firstName":"Milton","lastName":"Corkery","userId":"07f12089-1868-4ae4-9107-7fd21f3055dd","email":"Elizabeth.Dare@hotmail.com","jobTitle":"Global Configuration Director"},"createdTimestamp":1782944264711,"tags":["ambulo"]}],"id":"9855f773-300c-4179-9973-fd6811e0ec23","initiator":"+10856285711","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.711Z","lastModifiedTimestamp":1782944264711,"outcome":{"status":"answered"},"parties":[{"id":"+13558028794","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.711Z","joinedTimestamp":1782944264711,"leftAt":"2026-07-01T22:17:44.711Z","leftTimestamp":1782944264711,"durationSec":71,"vendorCallId":"CACE1C5C511C9B4AAE9505F13A02887777"}],"displayValue":"+1 047-376-1735"},{"id":"e5cbb313-83b1-402f-96a7-f28f98490bc8","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.711Z","joinedTimestamp":1782944264711,"leftAt":"2026-07-01T22:17:44.711Z","leftTimestamp":1782944264711,"durationSec":55,"vendorCallId":"CA5BAC6B91AC2F463B939F201781AFA2E5"}],"dials":[{"dialTimestamp":1782944264711,"dialAt":"2026-07-01T22:17:44.711Z","reason":"directDial"}],"extension":9056809,"email":"Albert_Rogahn10@hotmail.com","displayValue":"Amy Jerde","timezone":"America/Eirunepe"}],"recipient":"e39a2d9b-0465-48d4-88d0-9ea8fe5b14f4","recordings":[{"id":"3f253666-e3bc-4164-9f31-a9322f48784f","callId":"9855f773-300c-4179-9973-fd6811e0ec23","fileSize":651,"duration":145,"startedAt":"2026-07-01T22:17:44.711Z","mimeType":"audio/mpeg","channels":1}],"startedAt":"2026-07-01T22:17:44.712Z","startedTimestamp":1782944264712,"status":"ended","summary":{"companyNumberDescription":"Called in to +12166251456","contactNumberDescription":"Called in from +18770198706","header":"Inbound call from +15524635843 to Christine Wilkinson","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+10016134930","recipient":"+13985110344","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CAFE82A97B9E5D42E495D3C4319BAC74B5","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:243f4550_1888_46b0_9b50_47237ec2c3e0","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CAEE3696767A07404593591E222DA7144D","direction":"outbound"}],"total":0},"user":{"email":"Sigrid_Herman56@gmail.com","firstName":"Della","jobTitle":"Product Integration Liaison","lastName":"Halvorson-Sauer","mobile":"+19379933071","userId":"f3c5bac9-4eb1-41b4-b614-96cc06e17ea5"},"vendor":"twilio","vendorCallId":"CAE4F21A389B274A0FA61923B60753A853","waitTime":13937,"waitTimeText":"a few seconds"},"recording":{"callId":"9855f773-300c-4179-9973-fd6811e0ec23","channels":1,"duration":145,"fileSize":651,"id":"3f253666-e3bc-4164-9f31-a9322f48784f","mimeType":"audio/mpeg","startedAt":"2026-07-01T22:17:44.711Z","url":"https://upright-ocelot.info/"}},"id":"f2e47346-5bc1-41dc-9df0-865f697065b6","timestamp":1782944264709,"type":"call.recording.available","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallRecordingAvailableEvent"}}},"description":"Occurs whenever the recording of the call becomes available.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.started":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.694Z","data":{"call":{"assignedContact":{},"assignedUser":{},"companyNumber":"+18772134106","contactNumber":"+16963562995","direction":"inbound","directoryTarget":{"displayName":"Lonny Padberg","email":"Irma99@yahoo.com","extension":9507073,"id":"5aebf48c-c365-46b5-9cf9-393728a03240","type":"user"},"forms":[],"highlights":[],"id":"98588636-2e6b-4cc8-ac21-cf1140a48074","initiator":"+19337256645","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.699Z","lastModifiedTimestamp":1782944264699,"parties":[{"id":"+17767421999","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.700Z","joinedTimestamp":1782944264700,"vendorCallId":"CA1F493D792D3D42E9BA5F15DDE48EAF66"}],"displayValue":"+1 114-627-4430"}],"recipient":"5a0500a1-ec2f-4f96-a3ea-a5a8dfa74080","recordings":[],"startedAt":"2026-07-01T22:17:44.699Z","startedTimestamp":1782944264699,"status":"started","summary":{"companyNumberDescription":"Called in to +19373760925","contactNumberDescription":"Called in from +19357728686","header":"Inbound call from +10583569313 to Annabelle Stamm"},"user":{},"vendor":"twilio","vendorCallId":"CA84835A88905543BDB9C15E91D39073AE"}},"id":"9aa31937-afca-46f8-93ca-3f2d542f4cc6","timestamp":1782944264694,"type":"call.started","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallStartedEvent"}}},"description":"Occurs whenever a call starts on the Spoke platform.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.tariffed":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.729Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.730Z","assignedContact":{},"assignedUser":{"email":"Rodney12@yahoo.com","firstName":"Raquel","jobTitle":"Global Branding Consultant","lastName":"Lesch","mobile":"+19098186380","userId":"b9476a57-0671-472a-9112-432b0dac6e52"},"companyNumber":"+14045124686","contactNumber":"+12217436103","direction":"inbound","directoryTarget":{"displayName":"Aurelia Miller","email":"Guadalupe_Witting82@yahoo.com","extension":6617303,"id":"24a54ab0-b457-4da5-9fc8-9e95b14d1e33","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.730Z","forms":[],"highlights":[],"id":"5bf19b57-1633-430f-8897-214d0b3de7b2","initiator":"+15619474135","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.730Z","lastModifiedTimestamp":1782944264730,"outcome":{"status":"answered"},"parties":[{"isInternal":false,"displayValue":"+1 086-746-2869","id":"+12059942160","type":"phone","connections":[{"joinedTimestamp":1782944264730,"leftAt":"2026-07-01T22:17:44.730Z","leftTimestamp":1782944264730,"durationSec":71,"vendorCallId":"CAC18BAAC3D41145D58B91EDF1DB84019C","joinedAt":"2026-07-01T22:17:44.730Z"}]},{"isInternal":true,"displayValue":"Andrea Schinner","dials":[{"dialTimestamp":1782944264730,"reason":"directDial","dialAt":"2026-07-01T22:17:44.730Z"}],"extension":1448686,"id":"36857057-0c30-467f-bd15-9d75a73bc270","type":"user","connections":[{"joinedTimestamp":1782944264730,"leftAt":"2026-07-01T22:17:44.730Z","leftTimestamp":1782944264730,"durationSec":55,"vendorCallId":"CA7DE84233EC07403D8540D7DE457A673D","joinedAt":"2026-07-01T22:17:44.730Z"}],"email":"Claire_Larkin@gmail.com","timezone":"America/Dawson_Creek"}],"recipient":"88dc1701-ee2c-4226-9bb5-9d9d812e2a94","recordings":[],"startedAt":"2026-07-01T22:17:44.730Z","startedTimestamp":1782944264730,"status":"ended","summary":{"companyNumberDescription":"Called in to +10615953426","contactNumberDescription":"Called in from +13294838054","header":"Inbound call from +11002416450 to Janet Rowe","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+14894009367","recipient":"+17130762260","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA231B361C20E545DBB872C3D8C7AC81BF","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:4bc6e91e_2467_49d9_8f78_4020bd46e7cb","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CA90CF2BC5FBDA4F40B72D7282752434E8","direction":"outbound"}],"total":0},"user":{"email":"Floyd_Renner30@hotmail.com","firstName":"Kian","jobTitle":"Global Program Developer","lastName":"Feeney","mobile":"+15611187593","userId":"c1c5e81b-b33b-4274-b444-a77c9b9018ec"},"vendor":"twilio","vendorCallId":"CAE6A2D18FC849446EB0B78D388A1CCCB1","waitTime":13937,"waitTimeText":"a few seconds"}},"id":"d3c7b73c-2b6a-47eb-bf7b-2c640b775bff","timestamp":1782944264729,"type":"call.tariffed","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallTariffedEvent"}}},"description":"Occurs once a call has been tariffed by the Spoke Call Tariffing engine. Happens shortly after `call.ended`.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.transcript.created":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.731Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.732Z","assignedContact":{},"assignedUser":{"email":"Tyson_Swift36@gmail.com","firstName":"Enoch","jobTitle":"International Branding Officer","lastName":"Herzog","mobile":"+16734472752","userId":"79ea6d95-5c38-424e-b54b-db8a9ab5a8f6"},"companyNumber":"+18649612578","contactNumber":"+12397109063","direction":"inbound","directoryTarget":{"displayName":"Henrietta Vandervort","email":"Valerie47@yahoo.com","extension":1568347,"id":"6f1bfc8a-edd8-4bd3-bae0-6e519fd8b2e4","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.732Z","forms":[],"highlights":[{"createdAt":"2026-07-01T22:17:44.732Z","id":"6432d868-5b2f-4eb5-ac01-661d6f6692e1","createdByUser":{"mobile":"+17830512529","firstName":"Virgie","lastName":"Mitchell","userId":"850b5e66-ecf7-40f6-9f73-9dbf6eaedd15","email":"Ramon_Kovacek2@gmail.com","jobTitle":"Legacy Division Orchestrator"},"createdTimestamp":1782944264732,"tags":["carus"]},{"createdAt":"2026-07-01T22:17:44.732Z","id":"f522e980-c291-467e-957d-23922779a778","createdByUser":{"mobile":"+12549146599","firstName":"Enid","lastName":"Steuber","userId":"4f2f4519-56e5-4161-b641-205d51792d99","email":"Tamara32@hotmail.com","jobTitle":"Principal Directives Designer"},"createdTimestamp":1782944264732,"tags":["assentator"]}],"id":"7f2a3f96-d3f2-48c1-bab2-dee2bc3afb79","initiator":"+16323338079","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.732Z","lastModifiedTimestamp":1782944264732,"outcome":{"status":"answered"},"parties":[{"id":"+16569078363","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.732Z","joinedTimestamp":1782944264732,"leftAt":"2026-07-01T22:17:44.732Z","leftTimestamp":1782944264732,"durationSec":71,"vendorCallId":"CA597E2BDF9D6D43D4898744C53B89E983"}],"displayValue":"+1 096-772-5670"},{"id":"f0e00072-e73e-4d36-b9ce-18dafadb5899","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.732Z","joinedTimestamp":1782944264732,"leftAt":"2026-07-01T22:17:44.732Z","leftTimestamp":1782944264732,"durationSec":55,"vendorCallId":"CA5A3E613B4525459694FCEE8C75139AB2"}],"dials":[{"dialTimestamp":1782944264732,"dialAt":"2026-07-01T22:17:44.732Z","reason":"directDial"}],"extension":7352396,"email":"Quinten.Bernier16@hotmail.com","displayValue":"Antonia Wintheiser","timezone":"Asia/Bangkok"}],"recipient":"7d542a6a-21e6-4177-bdad-fa66fa20c7c4","recordings":[{"id":"721a7b47-ea95-44e8-87a4-1a7c4950be32","callId":"7f2a3f96-d3f2-48c1-bab2-dee2bc3afb79","fileSize":604,"duration":102,"startedAt":"2026-07-01T22:17:44.732Z","mimeType":"audio/wav","channels":2,"transcript":{"id":"2e408f5b-1322-4030-a5a7-ff65ec02f9b0","createdAt":1782944264732,"text":"Derideo id alveus una ventosus. Trans quaerat dicta corona adopto audio acer attonbitus. Vestigium tantum volubilis conturbo vulnus adulescens repudiandae terra. Summopere assumenda demoror antea baiulus suus. Stipes dedecor fugiat conqueror nesciunt. Charisma error suadeo. Cunabula animus accedo vulgus accusator tamdiu. Turpis stella atavus nesciunt ager titulus abeo. Praesentium tamen tepidus adinventitias urbanus illo auditor capillus. Vindico tabula curto paulatim corpus decerno voveo iste assumenda sumo. Crur theologus creator vallum capillus adiuvo deprimo. Cervus carpo abbas compello summa. Inflammatio ventito suadeo aliqua deserunt cruciamentum tendo solitudo annus congregatio. Campana laboriosam dolores labore uter varietas ipsa capillus deputo. Strenuus tabula acerbitas deorsum comitatus curia accusator communis ait debeo. Utrum est depono. Totam voluptatem capillus quos. Surgo reprehenderit earum balbus strenuus beatus aer cariosus allatus comis. Occaecati conor asperiores. Sollicito sodalitas optio coniuratio verus solum compono sit. Debilito assentator sub arguo color suadeo at arx annus. Toties cogo adulescens sordeo. Candidus capillus verbum blanditiis autem terra coniuratio sto. Suscipit crinis arceo synagoga cunctatio deserunt explicabo cupio. Voluptas taceo alter veritas. Subiungo vilitas caute. Caput terminatio valetudo spargo sopor vetus acidus cognomen libero umbra. Timidus demum stillicidium quasi demonstro. Aestus id ustilo voluptate coaegresco. Vester tyrannus benevolentia aurum. Stipes coerceo vae trucido. Audentia cupio neque odit suffoco auctor assentator aperte absorbeo. Ab cur derideo cuius ab. Accusator dedecor talus urbs laudantium velociter summopere depopulo. Tener tibi delego terreo. Versus cedo odio ambulo pecus fugit acsi consuasor. Denego vallum uterque advenio dolor cedo defleo acervus. Consequuntur commodo accendo vicinus. Adfectus depereo textus enim assumenda tolero voluptas. Alioqui aegrus capto aperte vado creber. Arma tergum defendo crastinus ars. Culpa cum supellex tot creber absconditus. Arca arbitro eum inflammatio ascit ulciscor eum summisse depono vilis. Curiositas studio vero ciminatio cognomen. Strenuus pariatur utroque tener uredo abbas confido versus cubitum. Cupiditas cometes natus astrum tui appono defaeco. Totus defessus teres velum conspergo accommodo vilicus. Combibo repellat crapula ubi. Quisquam corroboro subseco derelinquo vulgus umbra spoliatio. Socius suffragium officia mollitia surgo.","speakers":[{"displayName":"Shayna Schulist-Schneider","id":"+12829782625","numberE164":"+12829782625"}],"source":{"id":"721a7b47-ea95-44e8-87a4-1a7c4950be32","type":"call","contextId":"7f2a3f96-d3f2-48c1-bab2-dee2bc3afb79"}}}],"startedAt":"2026-07-01T22:17:44.732Z","startedTimestamp":1782944264732,"status":"ended","summary":{"companyNumberDescription":"Called in to +12922604630","contactNumberDescription":"Called in from +16989596184","header":"Inbound call from +16322439482 to Mrs. Tiffany Kunde","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+13404187706","recipient":"+15189827315","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA5F6E03330C704481BBDBF0B0E972EC52","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:50d3c6e9_eb7a_4941_bb78_65018d6e2d20","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CAEA386871C5C54998B1D3070D4E71FA74","direction":"outbound"}],"total":0},"user":{"email":"Glenn.Bergstrom@gmail.com","firstName":"Freddie","jobTitle":"National Implementation Architect","lastName":"Dickens","mobile":"+14367902695","userId":"5cebbc02-c9c3-4f88-9183-4b23f4760c4d"},"vendor":"twilio","vendorCallId":"CAADD0776A5B644C7C91C47BB1D3FB0C0A","waitTime":13937,"waitTimeText":"a few seconds"},"transcript":{"createdAt":1782944264732,"id":"2e408f5b-1322-4030-a5a7-ff65ec02f9b0","source":{"contextId":"7f2a3f96-d3f2-48c1-bab2-dee2bc3afb79","id":"721a7b47-ea95-44e8-87a4-1a7c4950be32","type":"call"},"speakers":[{"displayName":"Shayna Schulist-Schneider","id":"+12829782625","numberE164":"+12829782625"}],"text":"Derideo id alveus una ventosus. Trans quaerat dicta corona adopto audio acer attonbitus. Vestigium tantum volubilis conturbo vulnus adulescens repudiandae terra. Summopere assumenda demoror antea baiulus suus. Stipes dedecor fugiat conqueror nesciunt. Charisma error suadeo. Cunabula animus accedo vulgus accusator tamdiu. Turpis stella atavus nesciunt ager titulus abeo. Praesentium tamen tepidus adinventitias urbanus illo auditor capillus. Vindico tabula curto paulatim corpus decerno voveo iste assumenda sumo. Crur theologus creator vallum capillus adiuvo deprimo. Cervus carpo abbas compello summa. Inflammatio ventito suadeo aliqua deserunt cruciamentum tendo solitudo annus congregatio. Campana laboriosam dolores labore uter varietas ipsa capillus deputo. Strenuus tabula acerbitas deorsum comitatus curia accusator communis ait debeo. Utrum est depono. Totam voluptatem capillus quos. Surgo reprehenderit earum balbus strenuus beatus aer cariosus allatus comis. Occaecati conor asperiores. Sollicito sodalitas optio coniuratio verus solum compono sit. Debilito assentator sub arguo color suadeo at arx annus. Toties cogo adulescens sordeo. Candidus capillus verbum blanditiis autem terra coniuratio sto. Suscipit crinis arceo synagoga cunctatio deserunt explicabo cupio. Voluptas taceo alter veritas. Subiungo vilitas caute. Caput terminatio valetudo spargo sopor vetus acidus cognomen libero umbra. Timidus demum stillicidium quasi demonstro. Aestus id ustilo voluptate coaegresco. Vester tyrannus benevolentia aurum. Stipes coerceo vae trucido. Audentia cupio neque odit suffoco auctor assentator aperte absorbeo. Ab cur derideo cuius ab. Accusator dedecor talus urbs laudantium velociter summopere depopulo. Tener tibi delego terreo. Versus cedo odio ambulo pecus fugit acsi consuasor. Denego vallum uterque advenio dolor cedo defleo acervus. Consequuntur commodo accendo vicinus. Adfectus depereo textus enim assumenda tolero voluptas. Alioqui aegrus capto aperte vado creber. Arma tergum defendo crastinus ars. Culpa cum supellex tot creber absconditus. Arca arbitro eum inflammatio ascit ulciscor eum summisse depono vilis. Curiositas studio vero ciminatio cognomen. Strenuus pariatur utroque tener uredo abbas confido versus cubitum. Cupiditas cometes natus astrum tui appono defaeco. Totus defessus teres velum conspergo accommodo vilicus. Combibo repellat crapula ubi. Quisquam corroboro subseco derelinquo vulgus umbra spoliatio. Socius suffragium officia mollitia surgo."}},"id":"ef223495-b504-4dd3-a19a-89c152197898","timestamp":1782944264731,"type":"call.transcript.created","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallTranscriptCreatedEvent"}}},"description":"Occurs whenever a transcript of a call recording is created.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.transcription_completed":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.733Z","data":{"call":{"answeredAt":"2026-07-01T22:17:44.734Z","assignedContact":{},"assignedUser":{"email":"Rodolfo_Nolan@gmail.com","firstName":"Katelin","jobTitle":"Customer Applications Director","lastName":"Ernser","mobile":"+13194568913","userId":"814f4c09-7ea7-4f5f-a718-829bfa28793c"},"companyNumber":"+13605638447","contactNumber":"+13147498939","direction":"inbound","directoryTarget":{"displayName":"Ms. Katharina Kuphal","email":"Roland_Hand@yahoo.com","extension":9163740,"id":"b29f442f-dfa3-4be2-a4d9-2aa44ea231a4","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.735Z","forms":[],"highlights":[{"createdAt":"2026-07-01T22:17:44.735Z","id":"870cb622-6f87-4de1-be3f-3a50872db189","createdByUser":{"mobile":"+15286098082","firstName":"Pat","lastName":"Goldner","userId":"cf434bde-7cef-4562-9876-e470a7111379","email":"Luz_Mills-Kihn33@yahoo.com","jobTitle":"Central Accounts Specialist"},"createdTimestamp":1782944264735,"tags":["a"]},{"createdAt":"2026-07-01T22:17:44.735Z","id":"93d35df5-45fb-4426-bdbf-8534f811b6ef","createdByUser":{"mobile":"+19798105907","firstName":"Edith","lastName":"Roberts","userId":"16da3472-b63a-4afa-bdb7-036e381f148d","email":"Alexander15@gmail.com","jobTitle":"International Data Engineer"},"createdTimestamp":1782944264735,"tags":["suasoria"]}],"id":"5c47d2d4-48ef-49b6-b79a-6c8539f82b0a","initiator":"+14597826759","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.735Z","lastModifiedTimestamp":1782944264735,"outcome":{"status":"answered"},"parties":[{"id":"+18201342685","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.735Z","joinedTimestamp":1782944264735,"leftAt":"2026-07-01T22:17:44.735Z","leftTimestamp":1782944264735,"durationSec":71,"vendorCallId":"CA7D6E5AB0A060404FB5EA1FB25A919BA3"}],"displayValue":"+1 102-322-2007"},{"id":"c307758e-2517-44a5-85ab-e73d7a7d9a77","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.735Z","joinedTimestamp":1782944264735,"leftAt":"2026-07-01T22:17:44.735Z","leftTimestamp":1782944264735,"durationSec":55,"vendorCallId":"CA6B19CD72B99B45E78A7A3F3CE62A1709"}],"dials":[{"dialTimestamp":1782944264735,"dialAt":"2026-07-01T22:17:44.735Z","reason":"directDial"}],"extension":3249320,"email":"Krystal.Murray@hotmail.com","displayValue":"Carlos Williamson","timezone":"Asia/Kathmandu"}],"recipient":"929deb97-40b7-48b1-b4bd-0b3cfba47e57","recordings":[{"id":"e7e75d0b-8b33-40c0-94fa-cb8de74d32cd","callId":"5c47d2d4-48ef-49b6-b79a-6c8539f82b0a","fileSize":57,"duration":599,"startedAt":"2026-07-01T22:17:44.734Z","mimeType":"audio/mpeg","channels":1,"transcript":{"id":"ea7a6193-8243-4295-95e6-bad8a0432932","createdAt":1782944264734,"text":"Audacia timidus congregatio vorax sulum. Ducimus cognatus vorax suspendo antepono vito benigne vallum crur admoveo. Substantia tumultus corona id appositus vel aduro ex alius utrimque. Verus coniuratio alienus vehemens adamo degusto. Versus verbum depromo trans callide tui. Aperte suppono aliquam valetudo comis dedecor suffragium. Calcar tardus succurro. Curriculum adaugeo tondeo succurro. Advenio centum tactus vito cubicularis patrocinor amaritudo beatae cras amaritudo. Tantillus civitas attollo ipsum quas saepe absens abundans argumentum. Artificiose patria amoveo. Depraedor tantillus accommodo tepesco terminatio tredecim carmen candidus attollo. Tumultus crur tergo acerbitas vulnero. Amitto vesper trepide varietas id canonicus cuppedia. Sulum uterque utique apostolus vix ventito expedita volup eius decet. Arcesso cavus turba surgo accendo. Tenus vito uredo mollitia textilis ambitus autus cometes demulceo annus. Capitulus vulticulus altus abbas thesis adsuesco ullam uterque. Tendo artificiose texo sordeo cotidie viridis bonus tamdiu error adduco. Uter adinventitias officia. Concedo talis villa aspernatur. Comptus statim curvo stips curis sulum caute numquam una acer. Temperantia caput vomica absconditus tendo expedita volubilis tonsor possimus vergo. Benigne vespillo asporto convoco stipes vacuus undique confugo suffragium alter. Laudantium quo natus summa amplexus. Auditor patria astrum bene quo conspergo adfectus vinco. Quas astrum truculenter tunc strenuus terreo combibo patria teres. Deripio altus ad velum comedo coma inventore tertius. Tremo teres aequitas. Ipsa facilis vesica ambitus admoneo teres attonbitus coerceo amiculum dignissimos. Cupiditas utrimque colligo dolore aranea super bene. Cunctatio veritatis solutio. Cuppedia adduco harum torrens cohibeo ambulo cattus. Aut abbas debitis quod doloremque desparatus. Terebro casus laudantium viridis. Teres articulus velit vulgivagus bene uter cunabula blanditiis omnis. Arma depono fugit adhuc unus cumque crux debilito decet adsuesco. Acquiro cupio delicate comburo expedita deripio adinventitias utique ad degenero. Acsi tunc adstringo apostolus comburo commemoro tempore vos vaco viduo. Audeo vulnus aestas audentia. In carmen curo calamitas amplexus tenetur capitulus voluptatum aperiam tabula. Atavus uberrime impedit cariosus. Agnosco aestivus admiratio virga tredecim accusamus vulticulus aliqua. Color crur bis certus carbo civitas tepesco virtus cultura. Demo nam cibus. Virtus crudelis attollo suggero tero dedecor acidus. Solum defungo congregatio addo creator caveo conitor cicuta esse. Cribro amet summa sapiente conqueror ipsam ambitus vado absum bonus. Abscido quas non vallum voluptates acidus. Aegre votum testimonium stips ubi natus caecus.","speakers":[{"displayName":"Todd Conn","id":"+17409357189","numberE164":"+17409357189"}],"source":{"id":"e7e75d0b-8b33-40c0-94fa-cb8de74d32cd","type":"call","contextId":"5c47d2d4-48ef-49b6-b79a-6c8539f82b0a"}}},{"id":"4a48b04f-c741-46e2-98d2-aadf76817f35","callId":"5c47d2d4-48ef-49b6-b79a-6c8539f82b0a","fileSize":241,"duration":30,"startedAt":"2026-07-01T22:17:44.734Z","mimeType":"audio/mpeg","channels":2,"transcript":{"id":"f2f138d3-2be4-4a5f-b5b5-a40d91357148","createdAt":1782944264734,"text":"Amplitudo sol succedo temptatio congregatio despecto denuncio acerbitas. Aperte textilis accommodo. Curiositas adeptio illo suscipio vereor uterque vehemens. Sufficio viridis bestia confero strues viriliter ulciscor deleo depopulo cohaero. Advoco aestas suppono modi suasoria agnosco demens. Bellicus tunc eaque thermae tergo. Eveniet accusamus reiciendis deleniti. Inflammatio communis curtus. Tergum coruscus aequitas. Voco voveo conventus curriculum adhuc catena deinde ulciscor amiculum. Cupiditas unde absum artificiose arbitro cunae coniecto caelum. Aeneus appono vomer. Defluo cura cupiditas laborum congregatio provident defungo approbo campana derelinquo. Cultura corpus tempus sophismata crur terror utilis summopere crudelis tribuo. Theca adulescens tumultus curis circumvenio contigo pecus circumvenio solvo deorsum. Umbra velut turbo arbitro. Decipio demitto molestiae convoco. Censura subnecto adfero adfero antepono doloremque. Territo adsum alveus curo celebrer totidem summisse. Aperte speciosus asper cinis triduana laboriosam magnam neque. Deleo cena cervus mollitia varietas. Crebro ancilla bellum. Tamen cilicium vox perferendis. Aliqua unus tracto auctor crudelis totam victus adinventitias subito. Animadverto consuasor annus video perspiciatis. Quas canonicus dolores adeo debitis dolorem considero capto bibo aedificium. Defendo claro tracto magni acer venia. Aeger ipsam audeo fuga aliquam conatus accendo in ustilo. Comedo rem versus spargo delibero conatus cursim. Credo urbs civis amaritudo absum demulceo. Crustulum possimus decens baiulus adopto ascisco autus confero altus dicta. Verto culpo defero comptus. Tripudio absorbeo aestivus volva adeptio ager omnis villa nam. Atavus sodalitas cupressus accommodo coaegresco creta. Complectus catena sopor tripudio tabula curvo succurro blandior correptius spiculum. Sordeo caries tergeo vehemens creo certus spiritus. Iste vir stillicidium venia defaeco sulum. Debitis cognomen tabella tametsi alo depopulo adipisci armarium virtus ago. Chirographum tergeo aequus charisma animi angustus valeo. Termes astrum quam campana eius calculus careo asporto caecus cognatus. Repellat arto conitor. Defungo denego cena tabesco harum sequi sponte. Urbs aro corporis apostolus talio quam corona vorago. Verecundia conventus dolor paulatim. Beneficium artificiose paens. Ullus urbs delinquo cenaculum celebrer vilicus conspergo summopere voluptatibus convoco. Confero suppellex derelinquo in patior umerus venustas succurro facere allatus. Ventus centum tantillus deprecator turba beatus antepono. Atqui comburo crux animus. Approbo coadunatio templum soluta custodia amissio.","speakers":[{"displayName":"Donald Koss","id":"+19582998950","numberE164":"+19582998950"}],"source":{"id":"4a48b04f-c741-46e2-98d2-aadf76817f35","type":"call","contextId":"5c47d2d4-48ef-49b6-b79a-6c8539f82b0a"}}}],"startedAt":"2026-07-01T22:17:44.735Z","startedTimestamp":1782944264735,"status":"ended","summary":{"companyNumberDescription":"Called in to +16011610557","contactNumberDescription":"Called in from +10049969303","header":"Inbound call from +13562169278 to Lennie Murazik","outcome":"Spoke for a minute"},"tariff":{"connectedPartyTariffs":[{"amount":0,"total":0,"quantity":2,"initiator":"+15677521357","recipient":"+10281871689","routeDescription":"Unmatched Call Route - Zero Tariff","transport":"carrier","durationSec":70.141,"vendorCallId":"CA5C87CB39307D42E2921F834B04DC05AB","direction":null},{"amount":0,"total":0,"quantity":1,"initiator":"SYSTEM","recipient":"client:ce0ce1c6_066b_4366_b85d_0a16d60576e8","recipientCountry":null,"routeDescription":"High-volume customer - Inbound call surcharge","transport":"voip","durationSec":56.001,"vendorCallId":"CADE187FAF6A9444A6AD3CFEA3EEC3497E","direction":"outbound"}],"total":0},"user":{"email":"Travis_Franey@yahoo.com","firstName":"Magnolia","jobTitle":"Senior Operations Associate","lastName":"Goldner","mobile":"+14680557356","userId":"ae1e4427-9b2e-482b-a31f-9fef6fc95267"},"vendor":"twilio","vendorCallId":"CAC8F6B2DF2660461785612B8A312460DF","waitTime":13937,"waitTimeText":"a few seconds"}},"id":"c19c14d7-4808-4cd9-b424-8795d92f56f2","timestamp":1782944264733,"type":"call.transcription_completed","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallTranscriptionCompletedEvent"}}},"description":"Signifies that the transcription process for the call is completed. This event will only fire once for calls with multiple recordings.\n\n> Note: This event only fires for recorded calls with transcription enabled.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"call.voicemail.available":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.712Z","data":{"call":{"assignedContact":{},"assignedUser":{},"companyNumber":"+11643208879","contactNumber":"+13638657782","direction":"inbound","directoryTarget":{"displayName":"Wilmer Klein","email":"Austyn15@hotmail.com","extension":7113063,"id":"c5601ce9-3169-445f-b82e-a5c3eeca23d4","type":"user"},"duration":37315,"durationText":"a few seconds","endedAt":"2026-07-01T22:17:44.714Z","forms":[],"highlights":[],"id":"33120ee1-bbd2-4c7d-8be0-0512dbce2dd5","initiator":"+13897716737","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.714Z","lastModifiedTimestamp":1782944264714,"outcome":{"reason":"noOnePickedUp","status":"missed"},"parties":[{"isInternal":false,"displayValue":"+1 623-296-8663","id":"+10593849287","type":"phone","connections":[{"joinedTimestamp":1782944264714,"leftAt":"2026-07-01T22:17:44.714Z","leftTimestamp":1782944264714,"durationSec":38,"vendorCallId":"CAFCE82DFA384442638F334CBADD3774E2","joinedAt":"2026-07-01T22:17:44.714Z"}]},{"isInternal":true,"displayValue":"Lena Schowalter","dials":[{"dialTimestamp":1782944264714,"reason":"directDial","dialAt":"2026-07-01T22:17:44.714Z"}],"extension":4556454,"id":"454096bb-c17f-4706-b982-932dc60c980f","type":"user","email":"Carter87@hotmail.com","timezone":"America/Cancun"}],"recipient":"d766d66a-39e4-402b-852c-daed1e38991d","recordings":[],"startedAt":"2026-07-01T22:17:44.714Z","startedTimestamp":1782944264714,"status":"missed","summary":{"companyNumberDescription":"Called in to +13384416856","contactNumberDescription":"Called in from +15398802961","header":"Inbound call from +17303695012 to Sadie Bahringer","outcome":"Missed call"},"user":{},"vendor":"twilio","vendorCallId":"CA97F824AC79D840318544D9E5D2B4139C","voicemail":{"duration":11,"durationText":"0:11","id":"08b98466-4d54-40a6-9dc9-7e24c94763bd","transcription":"Voluptatum alveus tres assentator comes vesper cerno pecus titulus. Umquam vesper adiuvo carcer corroboro decipio. Nisi viriliter caries dolores. Tamquam veritas depromo valde aduro condico.","transcriptionConfidence":0.6608153581619263},"waitTime":37315,"waitTimeText":"a few seconds"},"voicemail":{"duration":11,"durationText":"0:11","id":"08b98466-4d54-40a6-9dc9-7e24c94763bd","recordingUrl":"https://jubilant-lava.net/","recordingUrlExpiresTimestamp":1782944264715,"transcription":"Voluptatum alveus tres assentator comes vesper cerno pecus titulus. Umquam vesper adiuvo carcer corroboro decipio. Nisi viriliter caries dolores. Tamquam veritas depromo valde aduro condico.","transcriptionConfidence":0.6608153581619263}},"id":"1e97e25f-ed0b-4b4a-b876-a8b84645e0fe","timestamp":1782944264712,"type":"call.voicemail.available","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/CallVoicemailAvailableEvent"}}},"description":"Occurs whenever the voicemail for a missed call becomes available.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Call Events"]}},"contact.shared":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.735Z","data":{"action":"add","contact":{"companyName":"Bode and Sons","emails":[{"label":"work","email":"Dorothy37@hotmail.com"},{"label":"personal","email":"Susie45@yahoo.com"}],"firstName":"Dustin","id":"676eaaa3-3883-43e1-bf65-acb75bf92746","jobTitle":null,"lastName":"Glover","phoneNumbers":[{"label":"work","numberRaw":"17536646558","numberDisplay":"+1 701-731-5710","numberE164":"+14832923076"}],"phonebookId":"67f29056-e57f-46fb-a655-ddbe7b33633a","phonebookName":"Diverse user-facing leverage"},"context":{"data":{"answeredAt":"2026-07-01T22:17:44.736Z","assignedUser":{"email":"Jean_Gulgowski@yahoo.com","firstName":"Vera","jobTitle":"Human Branding Consultant","lastName":"Nolan","mobile":"+15116068711","userId":"b9db9d6b-03cb-44c1-9a9e-01307fb81ecc"},"companyNumber":"+11538255036","contactNumber":"+15855695300","direction":"inbound","directoryTarget":{"displayName":"Rebecca Grady","email":"Melissa_Legros@gmail.com","extension":8380678,"id":"4855f39f-f485-4427-812a-6fc88b472853","type":"user"},"forms":[],"highlights":[],"id":"adc128eb-73e3-4d9e-86d7-76cfe15521ce","initiator":"+19988522749","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.736Z","lastModifiedTimestamp":1782944264736,"parties":[{"id":"+16284264701","type":"phone","isInternal":false,"connections":[{"joinedAt":"2026-07-01T22:17:44.736Z","joinedTimestamp":1782944264736,"vendorCallId":"CA60E8C0ED546C43CBB2F00A4E0E03A4AA"}],"displayValue":"+1 278-678-5851"},{"id":"a555aa3f-7cfb-4bb5-8b2d-725bcfa08e97","type":"user","isInternal":true,"connections":[{"joinedAt":"2026-07-01T22:17:44.736Z","joinedTimestamp":1782944264736,"vendorCallId":"CAF02565862D5741CEAC5C362D952A7994"}],"dials":[{"dialTimestamp":1782944264736,"dialAt":"2026-07-01T22:17:44.736Z","reason":"directDial"}],"extension":6610644,"email":"Stuart.Brown-Nienow@hotmail.com","displayValue":"Elsa Greenholt","timezone":"Europe/Gibraltar"}],"recipient":"77103aeb-c155-4471-98d2-acda1a831495","recordings":[],"startedAt":"2026-07-01T22:17:44.736Z","startedTimestamp":1782944264736,"status":"started","summary":{"companyNumberDescription":"Called in to +12348452390","contactNumberDescription":"Called in from +13694605570","header":"Inbound call from +15951933534 to Jessie Kuhlman"},"user":{"email":"Tyson_Kessler@hotmail.com","firstName":"Faye","jobTitle":"Direct Factors Architect","lastName":"Hickle","mobile":"+15898989519","userId":"76ef47d5-809c-45d1-b7a5-0f012131e677"},"vendor":"twilio","vendorCallId":"CABDC022B9B17F471EA95D9EA226607DFC","waitTime":13937,"waitTimeText":"a few seconds"},"type":"call"},"sharedByUser":{"displayName":"Irvin Muller","email":"Denise_White-Nader34@gmail.com","id":"1941ec88-9fc0-4a0c-a665-f84736a9cc75"}},"id":"ab80c229-6480-45ed-b33d-264f6d52eb9a","timestamp":1782944264735,"type":"contact.shared","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ContactSharedEvent"}}},"description":"Occurs whenever a new contact is shared by a user, specifying that they would like this contact to be added or updated in an externally connected system.\n\nA contact can be shared by a user from the Spoke Phone application in the following ways:\n- Adding a contact from the External Directory\n- Adding a contact for an unknown phone number associated with a call, either from the Participants tab of a live call or from the details of a Call History item\n- Adding a contact for an unknown phone number participant in a conversation\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Contact Events"]}},"content_analysis.completed":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.746Z","data":{"contentAnalysis":{"analyzer":{"name":"callRecordingAnalysis","version":"20250610-001"},"artifacts":[{"schema":"preProcessor","data":{"processDecision":"DO_NOT_PROCESS","reasonCode":"REASON_CODE_UNWANTED_CALL","reasonDescription":"Cura suffragium vapulus cornu animus maxime vulgaris uxor. Turpis amor blanditiis veniam.","detailedReasoning":"Stella vergo cilicium socius vicinus sed taceo xiphias. Crux color consequatur tollo tredecim maxime aliquam."}}],"id":"6d76a54b-3023-4915-8e94-686144e65172","request":{"content":{"recordings":[{"id":"c500c07e-d1d4-42b2-abb8-aa3b211dbc64","endedTimestamp":1782944264747,"channels":2,"url":"https://massive-alert.com","startedTimestamp":1782944264747}]},"participants":[{"id":"+19310728042","type":"contact","data":{"numberE164":"+17468621058"},"displayName":"Mazie Windler","connections":[{"joinedTimestamp":1782944264747,"leftTimestamp":1782944264747,"recordingChannel":0}]},{"id":"4b25c275-6461-4d5e-950e-1a7e0abd18e6","type":"user","data":{"email":"Anissa.Ledner@hotmail.com"},"displayName":"Parker Considine","connections":[{"joinedTimestamp":1782944264747,"leftTimestamp":1782944264747,"recordingChannel":1}]}],"source":{"data":{"answeredAt":"2026-07-01T22:17:44.747Z","assignedContact":{},"assignedUser":{"email":"Bette_OConnell@hotmail.com","firstName":"Lisandro","jobTitle":"Lead Data Liaison","lastName":"Brakus","mobile":"+10010250335","userId":"79184dcf-3f4d-494d-b43c-328bc6702ac4"},"companyNumber":"+13349428539","contactNumber":"+14010660637","direction":"inbound","directoryTarget":{"displayName":"Miss Eula Predovic","email":"Bonnie9@hotmail.com","extension":1743678,"id":"1658431a-ee26-4e2c-9651-a16e077fcaee","type":"user"},"duration":70779,"durationText":"a minute","endedAt":"2026-07-01T22:17:44.747Z","id":"cb1588e1-6d0a-40d3-ba6f-7060d021bd34","initiator":"+15221909942","isConference":false,"isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.747Z","lastModifiedTimestamp":1782944264747,"outcome":{"status":"answered"},"recipient":"cfb78e46-3253-4bdb-86ef-b4fcc891ae9c","startedAt":"2026-07-01T22:17:44.747Z","startedTimestamp":1782944264747,"status":"ended","summary":{"companyNumberDescription":"Called in to +11414275778","contactNumberDescription":"Called in from +18140422361","header":"Inbound call from +18299849326 to Orie Hamill","outcome":"Spoke for a minute"},"user":{"email":"Elmer45@hotmail.com","firstName":"Tracy","jobTitle":"Dynamic Operations Developer","lastName":"Bode","mobile":"+11319890536","userId":"f0b96305-02cd-4ce8-87c0-fb9212ee6fe1"},"vendor":"twilio","vendorCallId":"CAA2011C623B34496E86BF687BC5B4201C","waitTime":13937,"waitTimeText":"a few seconds"},"endedTimestamp":1782944264747,"id":"cb1588e1-6d0a-40d3-ba6f-7060d021bd34","product":"connect","startedTimestamp":1782944264747,"type":"call","vendor":"spoke"}},"status":"succeeded","transcript":"[JOIN: Mazie Windler (0:00)]\n\n[Mazie Windler (0:00)]: Mazie Windler speaking.\n\n[Parker Considine (0:02)]: Hi there, Mazie Windler.\n\n[Mazie Windler (0:04)]: Oh, hello. Hi. How are you?\n\n[Parker Considine (0:06)]: I'm doing good. I wanted to follow up on that project we discussed last week about the new marketing campaign.\n\n[Mazie Windler (0:11)]: Right, yes! I've been working on the initial designs and I think we're on the right track. The client feedback has been pretty positive so far.\n\n[Parker Considine (0:22)]: That's great to hear. I was wondering if you could send me the latest version by tomorrow morning? We have the stakeholder meeting at 10 AM.\n\n[Mazie Windler (0:26)]: Absolutely, I'll have everything ready and sent over by 8 AM. I'll include the revised mockups and the timeline we discussed.\n\n[Parker Considine (0:30)]: Perfect, that gives us time to review everything before the presentation. I really appreciate you staying on top of this.\n\n[Parker Considine (0:40)]: That's it. Thanks for your help. Bye.\n\n[Mazie Windler (0:41)]: Okay bye. See you.\n\n[LEAVE: Mazie Windler (0:41)]"}},"id":"14219cfe-b60b-449c-98a0-178c04ac73de","timestamp":1782944264746,"type":"content_analysis.completed","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ContentAnalysisCompletedEvent"}}},"description":"Signifies that the content analysis job for the submitted request is completed. The content analysis `status` indicates whether the job has `succeeded` or `failed`. This event will only fire once for each request.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Content Analysis Events"]}},"conversation.closed":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.739Z","data":{"conversation":{"assignedContact":{"companyName":"Breitenberg, Tremblay and Homenick","firstName":"Ransom","id":"9e9568ba-9add-4207-a984-93244ffdfdee","jobTitle":null,"lastName":"Harris","phoneNumbers":[{"label":"phone","numberRaw":"17030515764","numberDisplay":"+1 648-908-4280","numberE164":"+18950836841"}],"phonebookId":"cb43e965-7de7-428a-964b-30e4bea39b2e","phonebookName":"Fully-configurable encompassing service-desk"},"assignedUser":{"email":"Erica_Dibbert76@hotmail.com","firstName":"Irvin","jobTitle":"Corporate Research Producer","lastName":"Fay","mobile":"+16456554645","userId":"28648f0c-03e6-4fa9-8225-f15e664581f1"},"channel":"sms","companyNumber":"+15003871324","companyNumberOwner":{"displayName":"Yvette Simonis","email":"Rufus.Hickle@hotmail.com","id":"b387bed4-ca7c-4266-86e9-8f3963a814c2","type":"user"},"contactNumber":"+12213417221","id":"206df1a3-b260-4414-ba14-3d75f3a9b421","initiatedBy":"user","isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.739Z","lastModifiedTimestamp":1782944264739,"messages":[],"participants":[{"type":"user","displayName":"Kari Rice","id":"9c86178b-b0a1-4603-9257-7bd53f2092b0","email":"Mitchell.Kuhic@hotmail.com"},{"type":"contact","address":"+13698262849","displayName":"Robert Wiza","id":"7d8516cf-5874-403c-8715-404321e8eeb8","phonebookId":"18ed9524-7dd1-4e71-b4fc-7bac55c8c499"}],"user":{"email":"Doyle_Konopelski74@yahoo.com","firstName":"Pauline","jobTitle":"Regional Solutions Strategist","lastName":"Gleichner","mobile":"+19718193902","userId":"fe82f6a4-4d1e-4c08-bb0e-397e26a368dd"},"vendor":"twilio","vendorConversationId":"CH0DC409B68DCD44B0945635506544BF60"}},"id":"286c2da9-1a63-4e8d-989e-d583dede1318","timestamp":1782944264739,"type":"conversation.closed","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ConversationClosedEvent"}}},"description":"Occurs whenever the conversation is closed. A conversation can be manually closed by a user, or automatically closed by the system after a year of inactivity.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Conversation Events"]}},"conversation.contact_assigned":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.741Z","data":{"conversation":{"assignedContact":{"companyName":"Gibson and Sons","emails":[{"label":"work","email":null},{"label":"personal","email":null}],"firstName":"Winona","id":"cbcf24c0-7f49-4700-926e-72b28e676c08","jobTitle":null,"lastName":"Sauer","phoneNumbers":[{"label":"work","numberRaw":"11597174126","numberDisplay":"+1 720-518-6318","numberE164":"+14815948181"}],"phonebookId":"527f1a95-78c0-40cc-bf2d-7416f65a350e","phonebookName":"Organized well-modulated synergy"},"assignedUser":{"email":"Evangeline_Bruen54@yahoo.com","firstName":"Jayme","jobTitle":"","lastName":"Bernier","mobile":null,"userId":"3c03a633-2c5e-452c-affd-b73736f23904"},"channel":"sms","companyNumber":"+15271396368","companyNumberOwner":{"displayName":"Stand-alone dedicated matrix","id":"eddba83e-21af-4113-9f7d-11c90e0a95ac","type":"team"},"contactNumber":"+10561716816","id":"174dd671-6cdd-4c15-b6f3-c678bbf16b11","initiatedBy":"user","isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.742Z","lastModifiedTimestamp":1782944264742,"messages":[],"participants":[{"type":"user","displayName":"Kiera Hagenes","id":"3c6d8d92-90af-491e-9da8-17d913647ba8","email":"Rahsaan.Bednar@gmail.com"},{"type":"contact","address":"+11750812571","displayName":"Lottie Jast","id":"65b39574-d2fb-4083-bc26-54b93e720f30","phonebookId":"a3f6684a-14d0-484d-b19d-0667f358c50e"}],"user":{"email":"Nettie.Farrell18@yahoo.com","firstName":"Bradley","jobTitle":"Direct Accountability Associate","lastName":"Bayer","mobile":null,"userId":"85dc5af5-5160-4290-9b7c-abfaad1edf50"},"vendor":"twilio","vendorConversationId":"CH503A25AB1F5248008E1FF56E10EA8368"}},"id":"95813278-07af-46d3-80f0-3041150ab717","timestamp":1782944264741,"type":"conversation.contact_assigned","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ConversationContactAssignedEvent"}}},"description":"Occurs whenever a contact is assigned to a conversation.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Conversation Events"]}},"conversation.inactive":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.737Z","data":{"conversation":{"assignedContact":{"companyName":"Mertz - Howell","emails":[{"label":"work","email":"Joy_Emard@yahoo.com"},{"label":"personal","email":null}],"firstName":"Mark","id":"3f8dc72e-e9fa-40b4-93d9-ac12a18561a1","jobTitle":"Direct Markets Planner","lastName":"Goodwin","phoneNumbers":[{"label":"work","numberRaw":"15076261046","numberDisplay":"+1 575-190-4235","numberE164":"+14675090234"}],"phonebookId":"c7795bfb-402e-4466-93c2-f5dbef1f66ff","phonebookName":"Operative systemic projection"},"assignedUser":{"email":"Olga_Vandervort@hotmail.com","firstName":"Porter","jobTitle":null,"lastName":"Hoppe","mobile":null,"userId":"753ab3b8-806f-45f3-986a-41edcef2b88a"},"channel":"sms","companyNumber":"+10627399157","companyNumberOwner":{"displayName":"Elsie Bergnaum V","email":"Zola37@hotmail.com","id":"73491b86-1154-41d5-bfab-86c7346fc54f","type":"user"},"contactNumber":"+14146526611","id":"41781c05-0e58-4933-a4ee-67a131be8ddd","initiatedBy":"user","isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.738Z","lastModifiedTimestamp":1782944264738,"messages":[{"id":"87f222ec-8454-4529-b9aa-4264e399712c","vendorMessageId":"IMF174C4F235D04151A4DBFF421D67B208","conversationId":"90a0e57c-8bef-48c8-925b-9817f221828b","body":"Aurum demo accommodo triduana sonitus beatus architecto cenaculum suffoco agnosco. Vigilo quae acidus.","author":{"type":"user","displayName":"Stewart Johnson","id":"aa5f76ad-f808-45df-becb-3bd6b55aa9c9","email":"Roselyn.Sawayn93@hotmail.com"},"user":{"lastName":"Conn","firstName":"Albertha","jobTitle":null,"mobile":null,"userId":"53517ee9-8d1e-411e-9dfc-e2cdd30602f5","email":"Rene15@yahoo.com"},"assignedContact":{"id":"3f8dc72e-e9fa-40b4-93d9-ac12a18561a1","phonebookId":"c7795bfb-402e-4466-93c2-f5dbef1f66ff","firstName":"Mark","lastName":"Goodwin","companyName":"Mertz - Howell","jobTitle":"Direct Markets Planner","phoneNumbers":[{"label":"work","numberRaw":"15076261046","numberDisplay":"+1 575-190-4235","numberE164":"+14675090234"}],"emails":[{"label":"work","email":"Joy_Emard@yahoo.com"},{"label":"personal","email":null}],"phonebookName":"Operative systemic projection"},"direction":"outbound","isAutoResponse":false,"isApiCreated":false,"sentAt":"2026-07-01T22:17:44.738Z","sentAtTimestamp":1782944264738},{"id":"30bb38db-842c-451f-a2f6-052dff4e44d1","vendorMessageId":"IMF7E8F9494EF24269B34A90A650193285","conversationId":"14d982dd-4391-4dca-80e7-38e75e277688","body":"Sint caritas artificiose creptio tutamen vinum clarus surgo ad alienus. Apud decerno defetiscor amiculum umquam.","author":{"type":"contact","address":"+11866502979","displayName":"Amber Hartmann V","id":"6baa42d3-c331-428a-aee8-e749dad58032","phonebookId":"d1d5a199-f22a-4c82-a7cc-a75cb5878719"},"user":{"lastName":"Koss","firstName":"Jed","jobTitle":null,"mobile":null,"userId":"2b991077-473a-4fdd-b87e-5ddeb15b67d5","email":"Johnson.Keeling@hotmail.com"},"assignedContact":{"id":"3f8dc72e-e9fa-40b4-93d9-ac12a18561a1","phonebookId":"c7795bfb-402e-4466-93c2-f5dbef1f66ff","firstName":"Mark","lastName":"Goodwin","companyName":"Mertz - Howell","jobTitle":"Direct Markets Planner","phoneNumbers":[{"label":"work","numberRaw":"15076261046","numberDisplay":"+1 575-190-4235","numberE164":"+14675090234"}],"emails":[{"label":"work","email":"Joy_Emard@yahoo.com"},{"label":"personal","email":null}],"phonebookName":"Operative systemic projection"},"direction":"inbound","isAutoResponse":false,"isApiCreated":false,"sentAt":"2026-07-01T22:17:44.738Z","sentAtTimestamp":1782944264738},{"id":"d89628bc-6804-493e-a7ce-2dede91742e8","vendorMessageId":"IMC11FD8BA1CEC4C1DAC52EC5381635BA7","conversationId":"7dc2d1ca-3256-496c-9646-7ae39a49309c","body":null,"author":{"type":"user","displayName":"Stewart Johnson","id":"aa5f76ad-f808-45df-becb-3bd6b55aa9c9","email":"Roselyn.Sawayn93@hotmail.com"},"user":{"lastName":"Rodriguez","firstName":"Howard","jobTitle":null,"mobile":null,"userId":"eb98ea13-394f-4f40-b6a7-11a827808ddd","email":"Tracy.Bashirian-Kreiger@yahoo.com"},"assignedContact":{"id":"3f8dc72e-e9fa-40b4-93d9-ac12a18561a1","phonebookId":"c7795bfb-402e-4466-93c2-f5dbef1f66ff","firstName":"Mark","lastName":"Goodwin","companyName":"Mertz - Howell","jobTitle":"Direct Markets Planner","phoneNumbers":[{"label":"work","numberRaw":"15076261046","numberDisplay":"+1 575-190-4235","numberE164":"+14675090234"}],"emails":[{"label":"work","email":"Joy_Emard@yahoo.com"},{"label":"personal","email":null}],"phonebookName":"Operative systemic projection"},"direction":"outbound","isAutoResponse":false,"isApiCreated":false,"sentAt":"2026-07-01T22:17:44.738Z","sentAtTimestamp":1782944264738}],"participants":[{"type":"user","displayName":"Alberto McLaughlin","id":"49721ae8-8649-49dd-85ca-0e561327b592","email":"Jadyn.Schmidt3@hotmail.com"},{"type":"user","displayName":"Stewart Johnson","id":"aa5f76ad-f808-45df-becb-3bd6b55aa9c9","email":"Roselyn.Sawayn93@hotmail.com"},{"type":"contact","address":"+11866502979","displayName":"Amber Hartmann V","id":"6baa42d3-c331-428a-aee8-e749dad58032","phonebookId":"d1d5a199-f22a-4c82-a7cc-a75cb5878719"}],"user":{"email":"Pansy.Pacocha30@hotmail.com","firstName":"Danielle","jobTitle":null,"lastName":"Shields","mobile":null,"userId":"b1798fbe-ba7a-48ed-9ea4-0904eb80d401"},"vendor":"twilio","vendorConversationId":"CH52EC62CAB36842BAB6277F796D0ADE35"}},"id":"92d10b65-ce60-477a-9de9-f8c6596f0e80","timestamp":1782944264737,"type":"conversation.inactive","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ConversationInactiveEvent"}}},"description":"Occurs whenever the conversation is inactive. A conversation is automatically marked as inactive 30 minutes after the last message was sent or received.  This event can be used to add the content of the conversation to an external system.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Conversation Events"]}},"conversation.message.created":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.740Z","data":{"conversation":{"assignedContact":{"companyName":"Jaskolski - Oberbrunner","emails":[{"label":"work","email":null},{"label":"personal","email":null}],"firstName":"Deborah","id":"4d181132-25ed-40c4-b772-4edf615e7549","jobTitle":null,"lastName":"Moore","phoneNumbers":[{"label":"work","numberRaw":"19294965869","numberDisplay":"+1 750-774-7282","numberE164":"+19419578127"}],"phonebookId":"7078c2a0-722f-4f74-bf6c-7e47208bdeb7","phonebookName":"Expanded holistic initiative"},"assignedUser":{"email":"Alfredo81@yahoo.com","firstName":"Caroline","jobTitle":"","lastName":"Kshlerin","mobile":null,"userId":"df6214c9-86ad-445f-a5cf-1b65b11e2345"},"channel":"sms","companyNumber":"+12344916914","companyNumberOwner":{"displayName":"Devolved neutral hardware","id":"0a688475-b40f-4314-be65-6d9e52144219","type":"team"},"contactNumber":"+13064157792","id":"f9006ec7-2712-4033-969e-fc5d799bb011","initiatedBy":"user","isInternal":false,"lastModifiedAt":"2026-07-01T22:17:44.741Z","lastModifiedTimestamp":1782944264741,"messages":[{"id":"2fb25235-28e4-4d41-bad6-90e2dc3649b7","vendorMessageId":"IM1628756D3ED54EF69D64F99DF245F672","conversationId":"94cd8290-b3d2-4a6b-8e7d-81a26f3fb989","author":{"type":"user","displayName":"Conner Larson","id":"a0714c06-c43e-4ae9-8e68-63e381e5da97","email":"Francis_Jacobson98@hotmail.com"},"user":{"lastName":"McDermott","firstName":"Lance","jobTitle":null,"mobile":null,"userId":"a05521ba-aa3a-49c2-90ae-96d7eace076c","email":"Eileen89@gmail.com"},"assignedContact":{"id":"8fa3cbdb-f332-4ef4-81be-3f5f9ba9c375","phonebookId":"b3e2685b-8276-4beb-893b-4d61f693fb07","firstName":"Daphnee","lastName":"McKenzie","companyName":"Flatley Inc","jobTitle":null,"phoneNumbers":[{"label":"work","numberRaw":"13611977503","numberDisplay":"+1 985-647-9500","numberE164":"+19040013315"}],"emails":[{"label":"work","email":null},{"label":"personal","email":null}],"phonebookName":"Managed zero trust data-warehouse"},"direction":"outbound","isAutoResponse":false,"isApiCreated":false,"sentAt":"2026-07-01T22:17:44.741Z","sentAtTimestamp":1782944264741}],"participants":[{"type":"user","displayName":"Conner Larson","id":"a0714c06-c43e-4ae9-8e68-63e381e5da97","email":"Francis_Jacobson98@hotmail.com"},{"type":"contact","address":"+11982959569","displayName":"Shawn Bins","id":"699431e1-12d8-4489-a5c2-9a357f3bf2c9","phonebookId":"f59b5783-d08a-4c89-a225-9341534e5434"}],"user":{"email":"Rosa_Prohaska23@hotmail.com","firstName":"Shannon","jobTitle":"Chief Optimization Liaison","lastName":"Conroy","mobile":null,"userId":"b4659954-daa2-48ad-9606-3b658ae36a0d"},"vendor":"twilio","vendorConversationId":"CH765F92CACE1044919F1D65D285A3CACE"}},"id":"747dfab6-529d-4a82-a82a-5d0b0452adfa","timestamp":1782944264740,"type":"conversation.message.created","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/ConversationMessageCreatedEvent"}}},"description":"Occurs for each message created (received or sent) on a conversation.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Conversation Events"]}},"team.availability.updated":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.744Z","data":{"team":{"availability":{"availabilitySummary":"1 of 4 people available","status":"available","totalAvailable":1,"totalMembers":4},"displayName":"Decentralized optimal infrastructure","extension":83592,"id":"ec607ea1-c952-4f0d-be22-bb82497a2bc2","isHidden":false,"ivrKeyCode":0,"phoneNumbers":[],"teamMembers":[{"id":"ae550c25-2362-4109-8211-098fe842178a","displayName":"Miss Nicholas Ward","phoneNumbers":[],"type":"user","extension":4998412,"firstName":"Marc","lastName":"Wunsch","mobile":null,"email":"Gwen.Lesch@gmail.com","jobTitle":"Lead Implementation Consultant","location":"Port Guy","status":"active","isDirectorySynced":false,"licenses":["essentials"],"loginStatus":"loggedOut","teams":["Sharable zero trust archive"],"twimlRedirectUrl":"https://excellent-popularity.com/","availability":{"status":"offline","statusTimestamp":1782944264745,"statusAt":"2026-07-01T22:17:44.745Z","timezone":"Europe/Simferopol","availabilitySummary":"Offline"},"desktopEnrolledReleaseChannel":"stable"},{"id":"063471fd-bc3a-4d26-b10c-00f1eafb846f","displayName":"Dustin Fahey-Hirthe","phoneNumbers":[{"numberE164":"+17735301344","numberLocal":"(223) 253-5849","numberDisplay":"+1 397-903-2359"}],"type":"user","extension":"12622","firstName":"Kaela","lastName":"Ratke","mobile":null,"email":"Laverne92@hotmail.com","jobTitle":"Human Operations Associate","location":null,"status":"active","isDirectorySynced":false,"licenses":["proCx","enlightenPro"],"loginStatus":"loggedIn","desktopEnrolledReleaseChannel":"stable","teams":["Balanced zero tolerance methodology","Business-focused demand-driven approach"],"twimlRedirectUrl":"https://juvenile-unit.name/","availability":{"availabilitySummary":"Mona is on another call","callId":"3b1d56ed-1bd1-4360-8b11-458c14b90005","vendor":"twilio","vendorCallId":"CA56AD1B1B88B34AD7BD29E1E7ADDB2BAB","notAvailableReason":"On another call","notAvailableRule":"busyOnACall","status":"busy","statusAt":"2026-07-01T22:17:44.745Z","statusTimestamp":1782944264745,"timezone":"Pacific/Kosrae"}},{"id":"a96b823a-fea0-4072-a370-65a2c3922db1","displayName":"Kari Zulauf","phoneNumbers":[{"numberE164":"+13420752094","numberLocal":"(604) 494-4706","numberDisplay":"+1 844-170-7884"},{"numberE164":"+16244746104","numberLocal":"(027) 799-1968","numberDisplay":"+1 156-271-4843"}],"type":"user","extension":8337352,"firstName":"Carroll","lastName":"Goodwin","mobile":"+16810557524","email":"Lora.Langworth@yahoo.com","jobTitle":"Senior Optimization Assistant","location":"West Jordan","status":"active","isDirectorySynced":false,"licenses":["proCx","enlightenEssentials","callHub10Pack"],"loginStatus":"loggedIn","desktopEnrolledReleaseChannel":"beta","teams":["Adaptive motivating synergy"],"twimlRedirectUrl":"https://questionable-solvency.name/","availability":{"status":"available","statusTimestamp":1782944264745,"statusAt":"2026-07-01T22:17:44.745Z","timezone":"Antarctica/DumontDUrville","availabilitySummary":"Available"}},{"id":"7f6ef927-69e9-4eaa-9709-d61e536dc8b7","displayName":"Hope Barrows","phoneNumbers":[],"type":"user","extension":1514772,"firstName":"Kaleigh","lastName":"Gutmann","mobile":null,"email":"Furman_Wiegand@hotmail.com","jobTitle":"Regional Web Strategist","location":null,"status":"invited","isDirectorySynced":false,"licenses":[],"loginStatus":"loggedOut","teams":["Integrated leading edge emulation"],"twimlRedirectUrl":"https://moral-doing.net","desktopEnrolledReleaseChannel":"stable"}],"twimlRedirectUrl":"https://lanky-pick.com","type":"team"}},"id":"37f5d276-c0f8-4796-b969-d238b3e657a1","timestamp":1782944264744,"type":"team.availability.updated","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/TeamAvailabilityUpdatedEvent"}}},"description":"Occurs whenever the availability of any user in a team changes.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Team Events"]}},"transcript.created":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.745Z","data":{"links":{"call":"https://integration.spokephone.com/calls/15b4c2d0-f0b5-428a-a850-08fc7551aa48","segments":"https://integration.spokephone.com/transcripts/4e601313-8139-4e04-b5a3-704b3659fbb8/segments"},"transcript":{"createdAt":1782944264746,"id":"4e601313-8139-4e04-b5a3-704b3659fbb8","source":{"contextId":"15b4c2d0-f0b5-428a-a850-08fc7551aa48","id":"45e34835-bf3d-4026-8039-657fa605a005","type":"voicemail"},"speakers":[{"displayName":"Lowell Schmitt","id":"+10808595236","numberE164":"+10808595236"}],"text":"Absorbeo cunctatio territo creptio certus torqueo. Vesper tres modi ventito ad ut varius temporibus quod. Compono antea tamen theca ascisco adeo adipisci clamo vaco. Cometes vomito vox totidem. Deludo deripio vigilo eveniet cimentarius apparatus commodo. Ultio uxor volaticus itaque. Vorax tollo communis. Tepidus torrens defessus terror copiose. Chirographum cultellus decens arx absum statim depereo magni adaugeo. Nesciunt volo depraedor quis. Volo cogito contigo distinctio victus arca color alius corporis ipsa. Cogito soluta commemoro conforto delectus. Vigilo vulgivagus vergo voluptatum cumque consequatur adfectus toties. Ratione libero ustulo ab corroboro. Denuncio summa somniculosus strues sodalitas qui ustulo. Carus nisi attonbitus cum calcar arca votum succedo attollo. Audio adimpleo desidero audacia demulceo circumvenio celo paens. Debitis addo unde defaeco vereor tabesco. Optio tui comitatus vulgaris cresco. Velum debilito voluptas tersus advenio. Avaritia circumvenio adhuc accommodo sollicito expedita defaeco volva ipsa stabilis. Ter culpo fugiat caritas praesentium talis adeo amaritudo subiungo vigilo. Vomer trado aeneus absorbeo calcar tametsi. Suppono cotidie capto copia illum benevolentia volubilis. Canis tutis ars arca convoco. Cinis totus inventore desidero accusamus charisma patria dicta. Debitis adicio cubo creber artificiose super consequatur quisquam apostolus tunc. Clam annus voluntarius virga vestrum decor cubo. Rerum cornu viriliter comes clementia toties demulceo bos supplanto. Ducimus tenus somnus. Adicio ullam ventito combibo. Conitor tersus cuius. Vulpes unde tonsor aegre quia reiciendis cimentarius cubitum. Defungo carbo avaritia deripio provident tergeo vinitor. Delego voro caute cras repudiandae tenuis sortitus beatae curis cohors. Concido sulum ab debitis aeneus. Capillus comis atque verumtamen admoveo ago antepono cicuta suspendo tersus. Antea tamen patrocinor. Thema bene saepe avarus tabula currus. Denuo doloremque degero vehemens alioqui curriculum carmen capio. Cinis vir mollitia sumo curriculum textor tandem tondeo confugo civis. Tergeo accusator error aro depromo similique defluo clamo totidem claro. Angulus vallum accommodo ubi apud. Auditor adeo veritatis subnecto. Sodalitas deleo provident cognatus apud vos. Vita accusantium ipsam valeo. Ustilo alter color. Appello campana supellex deficio charisma audio tandem sint ubi caute. Sustineo bellicus aduro varius triumphus amiculum alo alter. Clam sufficio atavus victoria."}},"id":"78c93594-a732-4b98-b293-e53a763cdfe4","timestamp":1782944264745,"type":"transcript.created","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/TranscriptCreatedEvent"}}},"description":"Occurs whenever a transcript is created.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["Transcript Events"]}},"user.availability.updated":{"post":{"requestBody":{"content":{"application/json":{"examples":{"example":{"value":{"created":"2026-07-01T22:17:44.743Z","data":{"user":{"availability":{"availabilitySummary":"Kobe is on another call","callId":"613ecd45-db2c-4352-9465-f40f64032f7e","notAvailableReason":"On another call","notAvailableRule":"busyOnACall","status":"busy","statusAt":"2026-07-01T22:17:44.743Z","statusTimestamp":1782944264743,"timezone":"Antarctica/DumontDUrville","vendor":"twilio","vendorCallId":"CA7859E908285549E4A2E1FB7D8CDF835F"},"desktopEnrolledReleaseChannel":"stable","displayName":"Stephen Bailey","email":"Rosemary79@yahoo.com","extension":5802235,"firstName":"Monique","id":"ad09879b-97ec-4302-8f38-7289224485ea","isDirectorySynced":false,"jobTitle":"Central Response Analyst","lastName":"Kertzmann","licenses":["enlightenPro","proCx"],"location":"Lake Daphneebury","loginStatus":"loggedIn","mobile":"+18709559313","phoneNumbers":[{"numberE164":"+14867660098","numberLocal":"(478) 332-9977","numberDisplay":"+1 945-648-0304"},{"numberE164":"+13952765336","numberLocal":"(992) 327-6615","numberDisplay":"+1 171-133-6059"}],"status":"active","teams":["Ergonomic empowering generative AI","Managed zero administration adapter","Self-enabling intangible hub"],"twimlRedirectUrl":"https://sweet-produce.net","type":"user"}},"id":"1bc63026-69a6-4c5c-8ffd-5c4c3d46b9c3","timestamp":1782944264743,"type":"user.availability.updated","version":"2020-07-15"}}},"schema":{"$ref":"#/components/schemas/UserAvailabilityUpdatedEvent"}}},"description":"Occurs whenever the availability of any user changes.\n\nFor an example, see the Request Sample in the right sidebar.\n\nFor more information about webhooks, see [Webhook Events](#section/Webhook-Events)."},"responses":{"200":{"description":"Return a 200 status to indicate that the data was received successfully"}},"tags":["User Events"]}}}}
