openapi: 3.1.0 info: contact: email: support@telnyx.com description: Telnyx provides global communications and connectivity APIs for developers — including SIP trunking, programmable voice, SMS, MMS, WhatsApp Business Messaging, Call Control, Fax, Wireless (IoT & eSIM), Phone Numbers (DID provisioning & porting), Emergency Services, and Network APIs for private interconnects and edge connectivity. Build, scale, and manage voice, messaging, and data networks with Telnyx's carrier-grade global infrastructure and API-first platform. title: Telnyx Access Tokens Call Recordings API version: 2.0.0 x-endpoint-cost: light servers: - description: Version 2.0.0 of the Telnyx API url: https://api.telnyx.com/v2 security: - bearerAuth: [] tags: - description: Call Recordings operations. name: Call Recordings paths: /custom_storage_credentials/{connection_id}: delete: description: Deletes a stored custom credentials configuration. operationId: DeleteCustomStorageCredentials parameters: - $ref: '#/components/parameters/call-recordings_ConnectionId' responses: '204': description: The credentials configuration for connection_id was deleted successfully. '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Delete a stored credential tags: - Call Recordings x-latency-category: responsive get: description: Returns the information about custom storage credentials. operationId: GetCustomStorageCredentials parameters: - $ref: '#/components/parameters/call-recordings_ConnectionId' responses: '200': $ref: '#/components/responses/CredentialsResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Retrieve a stored credential tags: - Call Recordings x-latency-category: responsive post: description: Creates a custom storage credentials configuration. operationId: CreateCustomStorageCredentials parameters: - $ref: '#/components/parameters/call-recordings_ConnectionId' requestBody: $ref: '#/components/requestBodies/CreateCredentialsRequest' responses: '200': $ref: '#/components/responses/CredentialsResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Create a custom storage credential tags: - Call Recordings x-latency-category: responsive put: description: Updates a stored custom credentials configuration. operationId: UpdateCustomStorageCredentials parameters: - $ref: '#/components/parameters/call-recordings_ConnectionId' requestBody: $ref: '#/components/requestBodies/CreateCredentialsRequest' responses: '200': $ref: '#/components/responses/CredentialsResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Update a stored credential tags: - Call Recordings x-latency-category: responsive /recording_transcriptions: get: description: Returns a list of your recording transcriptions. operationId: getRecordingTranscriptions parameters: - $ref: '#/components/parameters/call-recordings_PageConsolidated' - description: Filter recording transcriptions by various attributes. explode: true in: query name: filter schema: properties: created_at: additionalProperties: false properties: gte: description: Returns only transcriptions created later than or at given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string lte: description: Returns only transcriptions created earlier than or at given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string type: object recording_id: description: If present, transcriptions will be filtered to those associated with the given recording. example: 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 format: uuid type: string type: object style: deepObject responses: '200': $ref: '#/components/responses/ListRecordingTranscriptionsResponse' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: List all recording transcriptions tags: - Call Recordings x-latency-category: responsive /recording_transcriptions/{recording_transcription_id}: delete: description: Permanently deletes a recording transcription. operationId: deleteRecordingTranscription parameters: - $ref: '#/components/parameters/RecordingTranscriptionId' responses: '200': $ref: '#/components/responses/RecordingTranscriptionResponse' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Delete a recording transcription tags: - Call Recordings x-latency-category: responsive get: description: Retrieves the details of an existing recording transcription. operationId: getRecordingTranscription parameters: - $ref: '#/components/parameters/RecordingTranscriptionId' responses: '200': $ref: '#/components/responses/RecordingTranscriptionResponse' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Retrieve a recording transcription tags: - Call Recordings x-latency-category: responsive /recordings: get: description: Returns a list of your call recordings. operationId: GetRecordings parameters: - $ref: '#/components/parameters/call-recordings_PageConsolidated' - description: Filter recordings by various attributes. explode: true in: query name: filter schema: properties: call_control_id: description: If present, recordings will be filtered to those with a matching `call_control_id`. example: v3:e-31OnvjEM7Y4wvxr3TKNk8M3QyLcGZPiUIzCGtwQtOtEjY-B0urkw type: string call_leg_id: description: If present, recordings will be filtered to those with a matching call_leg_id. example: 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 format: uuid type: string call_session_id: description: If present, recordings will be filtered to those with a matching call_session_id. example: 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 format: uuid type: string conference_id: description: Returns only recordings associated with a given conference. example: 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 type: string conference_region: description: If present, recordings will be filtered to those with a matching `conference_region`. example: us type: string connection_id: description: If present, recordings will be filtered to those with a matching `connection_id` attribute (case-sensitive). example: '175237942907135762' type: string created_at: additionalProperties: false properties: gte: description: Returns only recordings created later than or at given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string lte: description: Returns only recordings created earlier than or at given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string type: object end_time: additionalProperties: false properties: gte: description: Returns only recordings with an end time later than or equal to the given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string lte: description: Returns only recordings with an end time earlier than or equal to the given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string type: object from: description: If present, recordings will be filtered to those with a matching `from` attribute (case-sensitive). example: '1234567890' type: string sip_call_id: description: If present, recordings will be filtered to those with a matching `sip_call_id` attribute. Matching is case-sensitive. example: 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 type: string start_time: additionalProperties: false properties: gte: description: Returns only recordings with a start time later than or equal to the given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string lte: description: Returns only recordings with a start time earlier than or equal to the given ISO 8601 datetime. example: '2019-03-29T11:10:00Z' type: string type: object to: description: If present, recordings will be filtered to those with a matching `to` attribute (case-sensitive). example: '1234567890' type: string type: object style: deepObject responses: '200': $ref: '#/components/responses/RecordingsResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '403': $ref: '#/components/responses/ForbiddenResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' '500': $ref: '#/components/responses/call-recordings_InternalServerErrorResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: List all call recordings tags: - Call Recordings x-latency-category: responsive /recordings/actions/delete: post: description: Permanently deletes a list of call recordings. operationId: DeleteRecordings requestBody: $ref: '#/components/requestBodies/DeleteRecordingsRequest' responses: '200': content: application/json: schema: properties: status: enum: - ok example: ok type: string type: object description: The recordings have been successfully deleted. '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Delete a list of call recordings tags: - Call Recordings x-latency-category: responsive /recordings/{recording_id}: delete: description: Permanently deletes a call recording. operationId: DeleteRecording parameters: - $ref: '#/components/parameters/RecordingId' responses: '200': $ref: '#/components/responses/RecordingResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Delete a call recording tags: - Call Recordings x-latency-category: responsive get: description: Retrieves the details of an existing call recording. operationId: GetRecording parameters: - $ref: '#/components/parameters/RecordingId' responses: '200': $ref: '#/components/responses/RecordingResponseBody' '401': $ref: '#/components/responses/call-recordings_UnauthorizedResponse' '404': $ref: '#/components/responses/call-recordings_NotFoundResponse' default: $ref: '#/components/responses/call-recordings_GenericErrorResponse' summary: Retrieve a call recording tags: - Call Recordings x-latency-category: responsive components: schemas: CredentialsResponse: properties: connection_id: $ref: '#/components/schemas/ConnectionIdCredentials' data: $ref: '#/components/schemas/CustomStorageConfiguration' record_type: $ref: '#/components/schemas/RecordType' required: - data - connection_id - record_type title: CredentialsResponse type: object RecordingResponseData: properties: call_control_id: description: Unique identifier and token for controlling the call. example: v3:e-31OnvjEM7Y4wvxr3TKNk8M3QyLcGZPiUIzCGtwQtOtEjY-B0urkw type: string call_leg_id: description: ID unique to the call leg (used to correlate webhook events). example: 84a97d76-e40f-11ed-9074-02420a0daa69 type: string call_session_id: description: ID that is unique to the call session and can be used to correlate webhook events. Call session is a group of related call legs that logically belong to the same phone call, e.g. an inbound and outbound leg of a transferred call. example: 84a97d76-e40f-11ed-9074-02420a0daa69 type: string channels: description: When `dual`, the final audio file has the first leg on channel A, and the rest on channel B. enum: - single - dual example: dual type: string conference_id: description: Uniquely identifies the conference. example: 84a97d76-e40f-11ed-9074-02420a0daa69 type: string connection_id: description: Identifies the Telnyx application (Call Control, TeXML) or SIP connection resource associated with this recording. example: '175237942907135762' type: string created_at: description: ISO 8601 formatted date indicating when the resource was created. example: '2018-02-02T22:25:27.521Z' type: string download_urls: description: Links to download the recording files. properties: mp3: description: Link to download the recording in mp3 format. type: string wav: description: Link to download the recording in wav format. type: string type: object duration_millis: description: The duration of the recording in milliseconds. example: 60000 format: int32 type: integer from: description: The `from` (caller) number for the call that generated this recording. example: '+15551234567' type: string id: description: Uniquely identifies the recording. example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 type: string initiated_by: description: Indicates what triggered the recording. Possible values include `DialVerb`, `Conference`, `OutboundAPI`, `Trunking`, `RecordVerb`, `StartCallRecordingAPI`, `StartConferenceRecordingAPI`. example: StartCallRecordingAPI type: string record_type: enum: - recording example: recording type: string recording_ended_at: description: ISO 8601 formatted date of when the recording ended. example: '2019-01-23T18:10:02.574Z' type: string recording_started_at: description: ISO 8601 formatted date of when the recording started. example: '2019-01-23T18:10:02.574Z' type: string source: description: The kind of event that led to this recording being created. enum: - conference - call example: conference type: string status: description: The status of the recording. Only `completed` recordings are currently supported. enum: - completed example: completed type: string to: description: The `to` (callee) number for the call that generated this recording. example: '+15557654321' type: string updated_at: description: ISO 8601 formatted date indicating when the resource was updated. example: '2018-02-02T22:25:27.521Z' type: string title: RecordingResponseData type: object Region: description: Region where the bucket is located. example: us-east-1 type: string AzureConfigurationData: properties: account_key: $ref: '#/components/schemas/AzureAccountKey' account_name: $ref: '#/components/schemas/AzureAccountName' backend: description: Storage backend type enum: - azure type: string bucket: $ref: '#/components/schemas/Bucket' required: - backend title: Azure Blob Storage Configuration Data type: object AzureAccountKey: description: Azure Blob Storage account key. example: bPxRfiCYEXAMPLEKEY type: string CustomStorageConfiguration: properties: backend: enum: - gcs - s3 - azure example: gcs type: string configuration: discriminator: mapping: azure: '#/components/schemas/AzureConfigurationData' gcs: '#/components/schemas/GCSConfigurationData' s3: '#/components/schemas/S3ConfigurationData' propertyName: backend oneOf: - $ref: '#/components/schemas/GCSConfigurationData' - $ref: '#/components/schemas/S3ConfigurationData' - $ref: '#/components/schemas/AzureConfigurationData' required: - backend - configuration title: Custom Storage Configuration type: object AwsSecretAccessKey: description: AWS secret access key. example: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY type: string Credentials: description: Opaque credential token used to authenticate and authorize with storage provider. example: OPAQUE_CREDENTIALS_TOKEN type: string Bucket: description: Name of the bucket to be used to store recording files. example: example-bucket type: string RecordingResponse: properties: data: $ref: '#/components/schemas/RecordingResponseData' title: RecordingResponse type: object RecordingTranscription: properties: created_at: description: ISO 8601 formatted date indicating when the resource was created. example: '2018-02-02T22:25:27.521Z' type: string duration_millis: description: The duration of the recording transcription in milliseconds. example: 60000 format: int32 type: integer id: description: Uniquely identifies the recording transcription. example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 type: string record_type: enum: - recording_transcription example: recording_transcription type: string recording_id: description: Uniquely identifies the recording associated with this transcription. example: 3fa85f64-5717-4562-b3fc-2c963f66afa6 type: string status: description: The status of the recording transcription. Only `completed` has transcription text available. enum: - in-progress - completed example: completed type: string transcription_text: description: The recording's transcribed text. example: Good morning, how may I help you? type: string updated_at: description: ISO 8601 formatted date indicating when the resource was updated. example: '2018-02-02T22:25:27.521Z' type: string title: RecordingTranscriptionsResponseData type: object S3ConfigurationData: properties: aws_access_key_id: $ref: '#/components/schemas/AwsAccessKeyId' aws_secret_access_key: $ref: '#/components/schemas/AwsSecretAccessKey' backend: description: Storage backend type enum: - s3 type: string bucket: $ref: '#/components/schemas/Bucket' region: $ref: '#/components/schemas/Region' required: - backend title: AWS S3 Storage Configuration Data type: object ConnectionIdCredentials: description: Uniquely identifies a Telnyx application (Call Control, TeXML) or Sip connection resource. example: '1234567890' type: string call-recordings_Errors: properties: errors: items: $ref: '#/components/schemas/call-recordings_Error' type: array type: object AwsAccessKeyId: description: AWS credentials access key id. example: AKIAIOSFODNN7EXAMPLE type: string call-recordings_Error: properties: code: description: Error code identifier (string or numeric string). type: string detail: type: string meta: additionalProperties: true type: object source: properties: parameter: description: Indicates which query parameter caused the error. type: string pointer: description: JSON pointer (RFC6901) to the offending entity. type: string type: object title: type: string required: - code - title type: object call-recordings_CursorPaginationMeta: properties: cursors: $ref: '#/components/schemas/Cursor' next: description: Path to next page. example: /v2/recording_transcriptions?page[after]=v1:g3QAAAADZAAKdGVsbnl4X2lkc2wAAAABbQAAACRlYmRiYzdkNi1kZWRmLTExZWQtYTM3MS0wMjQyMGFlZjAwYjRqZAAJdGltZXN0YW1wbggA8Le4pGhpVxdkAAR0eXBlZAAFYWZ0ZXI= type: string previous: description: Path to previous page. example: /v2/recording_transcriptions?page[before]=v1:g3QAAAADZAAKdGVsbnl4X2lkc2wAAAABbQAAACRlYmRiYzdkNi1kZWRmLTExZWQtYTM3MS0wMjQyMGFlZjAwYjRqZAAJdGltZXN0YW1wbggA8Le4pGhpVxdkAAR0eXBlZAAFYWZ0ZXI= type: string title: Cursor Pagination Meta type: object GCSConfigurationData: properties: backend: description: Storage backend type enum: - gcs type: string bucket: $ref: '#/components/schemas/Bucket' credentials: $ref: '#/components/schemas/Credentials' required: - backend title: Google Cloud Storage Configuration Data type: object PaginationMeta: properties: page_number: example: 2 type: integer page_size: example: 25 type: integer total_pages: example: 3 type: integer total_results: example: 55 type: integer type: object RecordType: description: Identifies record type. enum: - custom_storage_credentials type: string Cursor: properties: after: description: Opaque identifier of next page. example: v1:g3QAAAADZAAKdGVsbnl4X2lkc2wAAAABbQAAACRlYmRiYzdkNi1kZWRmLTExZWQtYTM3MS0wMjQyMGFlZjAwYjRqZAAJdGltZXN0YW1wbggA8Le4pGhpVxdkAAR0eXBlZAAFYWZ0ZXI= type: string before: description: Opaque identifier of previous page. example: v1:g3QAAAADZAAKdGVsbnl4X2lkc2wAAAABbQAAACRlYmRiYzdkNi1kZWRmLTExZWQtYTM3MS0wMjQyMGFlZjAwYjRqZAAJdGltZXN0YW1wbggA8Le4pGhpVxdkAAR0eXBlZAAFYWZ0ZXI= type: string type: object AzureAccountName: description: Azure Blob Storage account name. example: my-account type: string parameters: RecordingTranscriptionId: description: Uniquely identifies the recording transcription by id. in: path name: recording_transcription_id required: true schema: example: 6a09cdc3-8948-47f0-aa62-74ac943d6c58 format: uuid type: string RecordingId: description: Uniquely identifies the recording by id. in: path name: recording_id required: true schema: type: string call-recordings_ConnectionId: description: Uniquely identifies a Telnyx application (Call Control, TeXML) or Sip connection resource. in: path name: connection_id required: true schema: type: string call-recordings_PageConsolidated: description: 'Consolidated page parameter (deepObject style). Originally: page[size], page[number]' explode: true in: query name: page schema: properties: number: default: 1 description: The page number to load. minimum: 1 type: integer size: default: 20 description: The size of the page. maximum: 250 minimum: 1 type: integer type: object style: deepObject responses: RecordingResponseBody: content: application/json: schema: $ref: '#/components/schemas/RecordingResponse' description: A response with a single recording resource. RecordingTranscriptionResponse: content: application/json: schema: properties: data: $ref: '#/components/schemas/RecordingTranscription' type: object description: A response with a single recording transcription resource. ListRecordingTranscriptionsResponse: content: application/json: schema: properties: data: items: $ref: '#/components/schemas/RecordingTranscription' type: array meta: $ref: '#/components/schemas/call-recordings_CursorPaginationMeta' type: object description: A response listing multiple recording transcriptions. RecordingsResponseBody: content: application/json: schema: properties: data: items: $ref: '#/components/schemas/RecordingResponseData' type: array meta: $ref: '#/components/schemas/PaginationMeta' type: object description: A response containing multiple recordings. call-recordings_GenericErrorResponse: content: application/json: schema: $ref: '#/components/schemas/call-recordings_Errors' description: Unexpected error. call-recordings_NotFoundResponse: content: application/json: examples: connection_not_found: summary: Connection not found value: errors: - code: '10005' detail: The requested resource or URL could not be found. source: pointer: /connection_id title: Resource not found not_found: summary: Generic not found value: errors: - code: '404' detail: Page not found title: Not Found schema: $ref: '#/components/schemas/call-recordings_Errors' description: Resource not found. The requested resource or URL could not be found. ForbiddenResponse: content: application/json: example: errors: - code: '403' detail: Forbidden title: Forbidden schema: $ref: '#/components/schemas/call-recordings_Errors' description: Forbidden. The request is understood but has been refused. CredentialsResponseBody: content: application/json: schema: $ref: '#/components/schemas/CredentialsResponse' description: A response containing a credentials resource. call-recordings_UnauthorizedResponse: content: application/json: example: errors: - code: '401' detail: Unauthorized title: Unauthorized schema: $ref: '#/components/schemas/call-recordings_Errors' description: Unauthorized. The request lacks valid authentication credentials. call-recordings_InternalServerErrorResponse: content: application/json: example: errors: - code: '500' detail: Internal server error title: Internal Server Error schema: $ref: '#/components/schemas/call-recordings_Errors' description: Internal server error. An unexpected error occurred on the server. requestBodies: CreateCredentialsRequest: content: application/json: schema: $ref: '#/components/schemas/CustomStorageConfiguration' description: Creates new credentials resource for the specified connection_id. required: true DeleteRecordingsRequest: content: application/json: example: ids: - 428c31b6-7af4-4bcb-b7f5-5013ef9657c1 - 428c31b6-7af4-4bcb-b7f5-5013ef9657c2 schema: properties: ids: description: List of call recording IDs to delete. items: type: string type: array required: - ids type: object description: Deletes recordings for the given list of IDs. required: true securitySchemes: bearerAuth: scheme: bearer type: http branded-calling_bearerAuth: description: API key passed as a Bearer token in the Authorization header scheme: bearer type: http oauthClientAuth: description: OAuth 2.0 authentication for Telnyx API and MCP integrations flows: authorizationCode: authorizationUrl: https://api.telnyx.com/v2/oauth/authorize refreshUrl: https://api.telnyx.com/v2/oauth/token scopes: admin: Administrative access to Telnyx resources tokenUrl: https://api.telnyx.com/v2/oauth/token clientCredentials: scopes: admin: Administrative access to Telnyx resources tokenUrl: https://api.telnyx.com/v2/oauth/token type: oauth2 outbound-voice-profiles_bearerAuth: bearerFormat: JWT scheme: bearer type: http pronunciation-dicts_bearerAuth: description: Telnyx API v2 key. Obtain from https://portal.telnyx.com scheme: bearer type: http stored-payment-transactions_bearerAuth: bearerFormat: JWT scheme: bearer type: http