> 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 " ``` ```python import requests url = "https://api.synthflow.ai/v2/assistants/" headers = {"Authorization": "Bearer "} 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/assistants/" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("Authorization", "Bearer ") 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 ' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.synthflow.ai/v2/assistants/") .header("Authorization", "Bearer ") .asString(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.synthflow.ai/v2/assistants/"); var request = new RestRequest(Method.GET); request.AddHeader("Authorization", "Bearer "); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["Authorization": "Bearer "] 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 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. ## FAQ #### Can I stop a campaign via the API? Yes. [Campaigns](/batch-calling) can be [paused, resumed, or canceled](/batch-calling#pause-resume-and-cancel) at any point using the `batch_call_id` you get back when you create one. Pausing keeps the queued recipients so you can pick up later, canceling drops them for good. Dialing speed is handled for you, and `reserved_concurrency` holds back capacity for calls outside the campaign. > Learn the Synthflow API base URLs, core endpoint groups, and the first steps for making authenticated requests.