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

# Introduction

> Learn the Synthflow API base URLs, core endpoint groups, and the first steps for making authenticated requests.

Welcome to the Synthflow API. These REST and streaming endpoints let you orchestrate every part of your phone calls automation stack from any environment that can make HTTPS requests.

## Base URLs

The API is available in multiple regions. Use the base URL that matches your workspace region:

| Region         | Base URL                          |
| -------------- | --------------------------------- |
| Global         | `https://api.synthflow.ai/v2/`    |
| United States  | `https://api.us.synthflow.ai/v2/` |
| European Union | `https://api.eu.synthflow.ai/v2/` |

To learn more about regions and data residency, see the [Clusters & Regions](/customer-region) guide.

## Endpoints

Use the reference in the sidebar to explore the full surface area, including:

* **Agents** – Create, update, and delete agents programmatically.
* **Calls** – Launch live calls, fetch history, or monitor active conversations.
* **Simulations** – Generate test cases and run rehearsal calls before you go live.
* **Actions** – Register custom workflows, attach them to agents, and manage lifecycle events.
* **Analytics** – Pull usage summaries or export granular metrics for your BI stack.
* **Telephony assets** – Provision phone numbers, manage contacts, and work with memory stores.
* **Knowledge bases & voices** – Upload domain content, manage sources, and browse voice options.

The API reference documents request/response schemas, query parameters, and error models for each endpoint.

Before you start calling endpoints, generate an API key and review the [authentication guide](/authentication) for security best practices.

## Make your first request

Once you have an [API key](/authentication), try a read-only request right here. The [List agents](/api-reference/platform-api/agents/list-assistant) endpoint returns the agents in your workspace and takes no required parameters, so it is a safe way to confirm your setup works. Add your key as a Bearer token and run it.

### Request

GET [https://api.synthflow.ai/v2/assistants/](https://api.synthflow.ai/v2/assistants/)

```curl
curl https://api.synthflow.ai/v2/assistants/ \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json"
```

```python
import requests

url = "https://api.synthflow.ai/v2/assistants/"

payload = {}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```go
package main

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

func main() {

	url := "https://api.synthflow.ai/v2/assistants/"

	payload := strings.NewReader("{}")

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

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	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/assistants/")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"

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/assistants/")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.synthflow.ai/v2/assistants/");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

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

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()
```

If you work in an AI tool like Claude Code or Codex, you can also manage Synthflow through the [Claude Code](/anthropic) and [Codex](/openai) connectors, an alternative interface to the same platform.