message.comDevelopers

Workspaces Live

Read and update the workspace bound to the current token. The workspace is the top-level container for everything: agents, departments, sites, conversations, the knowledge base, billing.

One business equals one workspace. Multi-brand and agency operators run several workspaces and switch in the dashboard. See Concept: workspace.

Get current workspace

GET/api/v1/workspaces/meAuth: Bearer

Returns the workspace record for the token-bound agent. There is no /workspaces/:id endpoint by design: every request is implicitly scoped to one workspace via the bearer token, so a list endpoint would be misleading.

Response shape

200 OK
{
  "id": "uuid",
  "version": 12,
  "name": "Acme Support",
  "subdomain": "acme-support",
  "primaryColor": "#FF4D1F",
  "logoUrl": "https://...",
  "channels": ["chat", "ticket", "call"],
  "businessHours": {
    "timezone": "America/New_York",
    "rules": [
      { "day": "mon", "open": "09:00", "close": "18:00" }
    ]
  },
  "ai": {
    "smartHoldEnabled": false,
    "agentAssistEnabled": true
  },
  "createdAt": "2026-01-04T12:00:00Z",
  "updatedAt": "2026-05-13T15:30:00Z"
}

Code samples

cURL
curl 'https://app.message.com/api/v1/workspaces/me' \
  -H 'Authorization: Bearer YOUR_WORKSPACE_JWT'
JavaScript
const res = await fetch('https://app.message.com/api/v1/workspaces/me', {
  headers: { Authorization: 'Bearer ' + token }
});
const workspace = await res.json();
Python
import requests
r = requests.get(
    "https://app.message.com/api/v1/workspaces/me",
    headers={"Authorization": f"Bearer {token}"},
)
workspace = r.json()
Ruby
require "net/http"
require "json"
uri = URI("https://app.message.com/api/v1/workspaces/me")
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  req = Net::HTTP::Get.new(uri)
  req["Authorization"] = "Bearer #{token}"
  http.request(req)
end
workspace = JSON.parse(res.body)
PHP
<?php
$ctx = stream_context_create([
  "http" => ["method" => "GET", "header" => "Authorization: Bearer $token"]
]);
$workspace = json_decode(file_get_contents("https://app.message.com/api/v1/workspaces/me", false, $ctx), true);

Update workspace

PATCH/api/v1/workspaces/meAuth: Bearer

Updates one or more workspace fields. Optimistic locking via expectedVersion is required.

Body

FieldTypeDescription
nameoptionalstringDisplay name shown in dashboard top bar.
primaryColoroptionalstringHex colour used by the widget launcher and dashboard accents.
logoUrloptionalstringPublic URL of the workspace logo. Use the Uploads API to host it on our CDN.
channelsoptionalstring[]Subset of chat, ticket, call. Disabling a channel hides it from inboxes.
businessHoursoptionalobjectPer-day open/close ranges plus timezone.
aioptionalobjectFeature flags for AI surfaces (Smart Hold, agent assist, AI receptionist).
expectedVersionrequiredintegerOptimistic-lock version. Stale versions return 409.
Body
{
  "name": "Acme Support",
  "primaryColor": "#FF4D1F",
  "expectedVersion": 12
}

Audit log

GET/api/v1/workspace/audit-logAuth: Bearer

Cursor-paginated list of admin actions on the workspace: invites, role changes, settings updates, suppression edits. Admin-only. See Audit log API.

Delete workspace

DELETE/api/v1/workspaces/meAuth: Bearer

Schedules the workspace for deletion. Requires the admin password as a confirmation step (passed in the body). Hard-delete runs after a 30-day grace period; until then you can cancel by logging back in.

Deletion is total. Conversations, recordings, voicemails, knowledge-base sources, and billing history are all purged. Export anything you need first via Reports and Audit log.

Errors

CodeWhen
400 invalid_bodyBody failed validation.
401 unauthorizedMissing or invalid bearer token.
403 forbiddenAgent role is not admin.
409 stale_versionexpectedVersion mismatch.

Common pitfalls

  • Looking for /workspaces/:id. Does not exist. Every token is workspace-scoped; use /workspaces/me.
  • Editing channels casually. Disabling a channel hides existing conversations from the inbox; they are not deleted, but agents stop seeing them. Re-enabling restores visibility.
  • Forgetting expectedVersion. The workspace settings page in the dashboard is the single most concurrently-edited resource in the product. Optimistic locks exist for a reason.