curl --request GET \
--url https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows")
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{
"type": "<string>",
"current_page": 123,
"next_page": 123,
"next_page_url": "<string>",
"prev_page": 123,
"prev_page_url": "<string>",
"data": [
{
"id": "<string>",
"name": "<string>",
"number": 123,
"created_at": "<string>",
"updated_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"cancelled_at": "<string>",
"reversed_at": "<string>",
"retried_at": "<string>",
"data_copy_completed_at": "<string>",
"cutover_at": "<string>",
"replicas_switched": true,
"primaries_switched": true,
"switch_replicas_at": "<string>",
"switch_primaries_at": "<string>",
"verify_data_at": "<string>",
"workflow_type": "move_tables",
"workflow_subtype": "<string>",
"defer_secondary_keys": true,
"workflow_errors": "<string>",
"may_retry": true,
"may_restart": true,
"verified_data_stale": true,
"sequence_tables_applied": true,
"actor": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"verify_data_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"reversed_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"switch_replicas_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"switch_primaries_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"cancelled_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"completed_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"retried_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"cutover_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"reversed_cutover_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"branch": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"source_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"target_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"global_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
}
}
]
}List workflows
curl --request GET \
--url https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows"
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(string(body))
}HttpResponse<String> response = Unirest.get("https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.planetscale.com/v1/organizations/{organization}/databases/{database}/workflows")
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{
"type": "<string>",
"current_page": 123,
"next_page": 123,
"next_page_url": "<string>",
"prev_page": 123,
"prev_page_url": "<string>",
"data": [
{
"id": "<string>",
"name": "<string>",
"number": 123,
"created_at": "<string>",
"updated_at": "<string>",
"started_at": "<string>",
"completed_at": "<string>",
"cancelled_at": "<string>",
"reversed_at": "<string>",
"retried_at": "<string>",
"data_copy_completed_at": "<string>",
"cutover_at": "<string>",
"replicas_switched": true,
"primaries_switched": true,
"switch_replicas_at": "<string>",
"switch_primaries_at": "<string>",
"verify_data_at": "<string>",
"workflow_type": "move_tables",
"workflow_subtype": "<string>",
"defer_secondary_keys": true,
"workflow_errors": "<string>",
"may_retry": true,
"may_restart": true,
"verified_data_stale": true,
"sequence_tables_applied": true,
"actor": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"verify_data_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"reversed_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"switch_replicas_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"switch_primaries_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"cancelled_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"completed_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"retried_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"cutover_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"reversed_cutover_by": {
"id": "<string>",
"display_name": "<string>",
"avatar_url": "<string>"
},
"branch": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"source_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"target_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
},
"global_keyspace": {
"id": "<string>",
"name": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"deleted_at": "<string>"
}
}
]
}Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
The name of the organization the workflow belongs to
The name of the database the workflow belongs to
Query Parameters
Filter workflows to those active during a time range (e.g. 2025-01-01T00:00:00Z..2025-01-01T23:59:59)
If provided, specifies the page offset of returned results
If provided, specifies the number of returned results
Response
Returns workflows
The response type. Always "list" for paginated responses.
The current page number
The next page number, or null when this is the last page
The next page of results, or null when this is the last page
The previous page number, or null when this is the first page
The previous page of results, or null when this is the first page
Show child attributes
Show child attributes

