List workspaces
curl --request GET \
--url https://app.surferseo.com/api/v2/workspaces \
--header 'API-KEY: <api-key>'import requests
url = "https://app.surferseo.com/api/v2/workspaces"
headers = {"API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-KEY': '<api-key>'}};
fetch('https://app.surferseo.com/api/v2/workspaces', 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://app.surferseo.com/api/v2/workspaces",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>"
],
]);
$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://app.surferseo.com/api/v2/workspaces"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.surferseo.com/api/v2/workspaces")
.header("API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surferseo.com/api/v2/workspaces")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"inserted_at": "2024-04-12T15:23:45Z",
"id": 123,
"name": "My Workspace",
"state": "active",
"type": "branded",
"updated_at": "2024-06-01T09:17:33Z",
"gsc_site_url": "https://example.com",
"location": "United States"
}
],
"meta": {
"page": 1,
"page_size": 25,
"total": 156,
"total_pages": 7,
"filters": {
"inserted_after": "2024-04-12T15:23:45Z",
"state": "completed"
},
"order": "desc",
"sort": "inserted_at"
}
}{
"error": {
"details": [
{
"field": "keywords",
"reason": "required"
}
],
"reason": "validation_error"
}
}{
"error": {
"details": [],
"reason": "unauthorized"
}
}{
"error": {
"details": [],
"reason": "permission_denied"
}
}{
"error": {
"details": [
{
"allowed": [
"application/json"
],
"field": "accept",
"reason": "unsupported"
}
],
"message": "Accept must be one of: application/json",
"reason": "not_acceptable"
}
}{
"error": {
"details": [
{
"retry_after": 30
}
],
"reason": "rate_limit_exceeded"
}
}Workspaces
List workspaces
Returns a paginated list of workspaces for the authenticated organization.
Results can be filtered by workspace type and state, and ordered by name or timestamps.
Unknown filter keys are ignored. Applied filters are reflected in the response meta.filters object.
Only workspaces with active state can be used to manage workspace-related resources.
Rate limit: 10 requests/sec
GET
/
api
/
v2
/
workspaces
List workspaces
curl --request GET \
--url https://app.surferseo.com/api/v2/workspaces \
--header 'API-KEY: <api-key>'import requests
url = "https://app.surferseo.com/api/v2/workspaces"
headers = {"API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'API-KEY': '<api-key>'}};
fetch('https://app.surferseo.com/api/v2/workspaces', 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://app.surferseo.com/api/v2/workspaces",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"API-KEY: <api-key>"
],
]);
$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://app.surferseo.com/api/v2/workspaces"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.surferseo.com/api/v2/workspaces")
.header("API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.surferseo.com/api/v2/workspaces")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"inserted_at": "2024-04-12T15:23:45Z",
"id": 123,
"name": "My Workspace",
"state": "active",
"type": "branded",
"updated_at": "2024-06-01T09:17:33Z",
"gsc_site_url": "https://example.com",
"location": "United States"
}
],
"meta": {
"page": 1,
"page_size": 25,
"total": 156,
"total_pages": 7,
"filters": {
"inserted_after": "2024-04-12T15:23:45Z",
"state": "completed"
},
"order": "desc",
"sort": "inserted_at"
}
}{
"error": {
"details": [
{
"field": "keywords",
"reason": "required"
}
],
"reason": "validation_error"
}
}{
"error": {
"details": [],
"reason": "unauthorized"
}
}{
"error": {
"details": [],
"reason": "permission_denied"
}
}{
"error": {
"details": [
{
"allowed": [
"application/json"
],
"field": "accept",
"reason": "unsupported"
}
],
"message": "Accept must be one of: application/json",
"reason": "not_acceptable"
}
}{
"error": {
"details": [
{
"retry_after": 30
}
],
"reason": "rate_limit_exceeded"
}
}Authorizations
Query Parameters
Page number (1-indexed).
Required range:
x >= 1Number of items per page.
Required range:
1 <= x <= 100Filter workspaces by type.
Available options:
playground, branded Filter workspaces by state.
Available options:
inactive, processing, ready_for_activation, active, failed, disabled Field to sort by.
Available options:
inserted_at, updated_at, name Sort direction.
Available options:
asc, desc Was this page helpful?