> For a complete page index, fetch https://docs.synthflow.ai/llms.txt. For full documentation content, fetch https://docs.synthflow.ai/llms-full.txt.

# Recordings

> How to move from the recording_url field in the calls endpoints to the recordings endpoint before the field becomes unavailable on January 10, 2027.

Call recordings now have their own endpoint in the Platform API. [Get a recording](/api-reference/platform-api/recordings/get-call-recording) hands you a download link for a call's audio whenever you ask, so there is no link to store.

It replaces the `recording_url` field in the [Get a call](/api-reference/platform-api/calls/get-phone-call) and [List calls](/api-reference/platform-api/calls/list-calls) responses. That field is deprecated and becomes unavailable on **January 10, 2027**. The field keeps working until then, so you can switch at your own pace. Get a call and List calls stay available after that date.

## Who is affected

You are affected if anything you have built reads `recording_url` from the calls endpoints: a script that downloads call audio, a CRM sync that stores the recording link with the call, or a Zapier or Make workflow that maps the field to another tool.

You are also affected if you store the recording link from the [post-call webhook](/webhooks#post-call-webhook). The webhook keeps sending it, but from January 10, 2027 the link expires after 24 hours.

You are not affected if you only listen to recordings in the dashboard [call logs](/logs).

## What changes for you

Today you read a link from the call record. The recordings endpoint takes the call ID and the same [API key](/authentication) as the rest of the Platform API, and answers with a redirect to a signed download link. Each link is valid for 24 hours from when it was first issued, and repeated requests within that window return the same link. A client that follows redirects receives the audio file directly.

Because you can request a link whenever you need one, there is nothing to store. Keep the call ID and request the recording whenever you need it.

If the call has no recording, or it is not in your workspace, the response is `404`. Handle it the way you handle an empty `recording_url` today.

## Recommended steps

1. Find every place that reads `recording_url` from the calls endpoints.
2. Replace each one with a request to the recordings endpoint, made at the moment you need the audio. Try it below with one of your own call IDs.
3. Treat a `404` response as "no recording".
4. Stop storing recording links. Keep the call ID instead, and download the audio file if you need a permanent copy.

### Request

GET [https://api.synthflow.ai/v2/calls/\{call_id}/recording](https://api.synthflow.ai/v2/calls/\{call_id}/recording)

```curl
curl https://api.synthflow.ai/v2/calls/call_id/recording \
     -H "Authorization: Bearer <token>"
```

```python
import requests

url = "https://api.synthflow.ai/v2/calls/call_id/recording"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.synthflow.ai/v2/calls/call_id/recording"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.synthflow.ai/v2/calls/call_id/recording")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.synthflow.ai/v2/calls/call_id/recording")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.synthflow.ai/v2/calls/call_id/recording");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.synthflow.ai/v2/calls/call_id/recording")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

## What happens on January 10, 2027

After this date the `recording_url` field in the calls endpoints no longer returns a recording link, and anything still reading it stops receiving recordings. The [post-call webhook](/webhooks#post-call-webhook) still includes a recording link, but it is valid for 24 hours only. The recordings endpoint is the way to fetch call audio at any later time.

## FAQ

#### Do I need to do anything before January 10, 2027?

Only if something you have built reads `recording_url` from the calls endpoints, or stores the post-call webhook's recording link for longer than 24 hours. Switch the first to [Get a recording](/api-reference/platform-api/recordings/get-call-recording) before the date. For webhook links, download the audio when the webhook arrives, or keep the call ID and request a link later. If you use the webhook link right away, nothing changes.

#### Can I keep storing recording links?

Links from the recordings endpoint expire after 24 hours, so a stored link goes stale. Keep the call ID and request a link when you need it, or download the audio file for a permanent copy.

#### Does the recordings endpoint work for older calls?

Yes. It works for any call in your workspace that has a recording, regardless of when the call took place.

#### Does this affect the post-call webhook?

The webhook keeps sending a recording link, but from January 10, 2027 that link expires after 24 hours. Download the audio when the webhook arrives, or keep the call ID and use the recordings endpoint later.

#### Does this affect recordings in the dashboard?

No. Playback and download in the dashboard [call logs](/logs) are unchanged. This change only affects the Platform API.