curl --request GET \
--url https://api.mymarky.ai/api/workspaces \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mymarky.ai/api/workspaces"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mymarky.ai/api/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://api.mymarky.ai/api/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 => [
"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.mymarky.ai/api/workspaces"
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.mymarky.ai/api/workspaces")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mymarky.ai/api/workspaces")
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{
"items": [
{
"id": "<string>",
"created_at": "<string>",
"name": "<string>",
"description": "<string>",
"industry": "<string>",
"website": "<string>",
"language": "en",
"updated_at": "<string>"
}
],
"next": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}List workspaces
List the workspaces you can access.
An API key sees its organization’s workspaces. A signed-in user sees every workspace in an org they own or administer, plus only the specific workspaces they were added to in an org where they are a guest.
START HERE: every other endpoint takes a workspace id (the business_id
parameter), and this is the tool that returns them. An agent with no workspace
id in context begins with this call. Returns SUMMARY rows only (id, name,
description, industry, website, language, timestamps), newest first. To read a
workspace’s full profile (strategy doc, design style, writing instructions),
call get_workspace with the id from this list. Optional name narrows the list
by case-insensitive substring match. If next is set, keep paging with it
before concluding a workspace doesn’t exist.
Errors: 401 authentication_required: API key or token is missing, invalid, or revoked. 403 permission_denied: Your plan does not include API access. 429 rate_limit_exceeded: You sent too many requests this minute.
curl --request GET \
--url https://api.mymarky.ai/api/workspaces \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.mymarky.ai/api/workspaces"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.mymarky.ai/api/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://api.mymarky.ai/api/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 => [
"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.mymarky.ai/api/workspaces"
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.mymarky.ai/api/workspaces")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.mymarky.ai/api/workspaces")
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{
"items": [
{
"id": "<string>",
"created_at": "<string>",
"name": "<string>",
"description": "<string>",
"industry": "<string>",
"website": "<string>",
"language": "en",
"updated_at": "<string>"
}
],
"next": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"instance": "<string>",
"request_id": "<string>",
"param": "<string>"
}Authorizations
Bearer an mk_live_ API key. A key is ORG-SCOPED: it grants full access to every resource in that organization, with no per-endpoint scoping (see the uid pseudo-permission on each operation). Manage keys at https://app.mymarky.ai.
Headers
Opt into a dated API version. Omit to stay on the floor (2026-04-08) forever — unpinned clients never break. Pin to a newer date (e.g. 2026-11-03) to receive the newest response shapes. Unknown values fall back to the floor. See https://docs.mymarky.ai for the versioning model.
2026-04-08, 2026-07-17, 2026-08-02, 2026-08-04, 2026-08-06, 2026-10-30, 2026-10-31, 2026-11-03 "2026-11-03"
Query Parameters
Max results per page (1-100)
1 <= x <= 100The next value from the previous page's response, passed back verbatim. Leave it out for the first page. When next is null you have every result.
Filter by name, case-insensitive substring (e.g. "bakery" matches "Eli's Bakery").
