REST API
Workspaces
Read workspaces available to the PAT owner and retrieve workspace settings. The list can include a workspace where PAT access is disabled, so a returned slug does not guarantee workspace-scoped API access.
GET
/v2/workspacesWorkspace list search
List workspaces accessible to the requester.
Parameters
statusWorkspaceStatus | nullWorkspace status to retrieve.only_activeboolean | nullqueryWhether to return only active workspaces.offsetintegerqueryDefault0Zero-based offset of the first returned item.limitintegerqueryDefault20Maximum number of items returned.
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
itemsRequiredV2Workspace[]Workspaces.idRequiredintegerWorkspace identifier.slugRequiredstringCurrent workspace slug used in the request path.nameRequiredstringWorkspace name.emailstring | nullWorkspace contact email address.billing_emailRequiredstringWorkspace billing email address.keywordsRequiredstring[]Default workspace keywords.colorRequiredstringWorkspace display color.use_2faRequiredbooleanWhether two-factor authentication is enabled.ip_block_typeRequiredIpBlockTypeWorkspace IP access restriction mode.statusRequiredWorkspaceStatusWorkspace status.referrer_codestring | nullWorkspace referral code.domainsRequiredstring[]Email domains registered to the workspace.pat_enabledRequiredbooleanWhether workspace-scoped APIs can be called using a personal access token.base_roleRequiredBaseWorkspaceRoleRequester's default workspace role.settingsRequiredV2WorkspaceSettingsDefault record and retention settings for the workspace.created_atRequiredstring (date-time)Date and time when the workspace was created.updated_atRequiredstring (date-time)Date and time when the workspace was last updated.pageRequiredV2PaginationWorkspace pagination information.offsetRequiredintegerZero-based offset of the first returned item.limitRequiredintegerRequested maximum number of items.totalRequiredintegerTotal number of matching items.
Response example
{
"items": [
{
"id": 1,
"slug": "your-workspace",
"name": "Example",
"billing_email": "developer@example.com",
"keywords": [
"string"
],
"color": "string",
"use_2fa": true,
"ip_block_type": "none",
"status": "created",
"domains": [
"string"
],
"pat_enabled": true,
"base_role": "workspace_manager",
"settings": {
"default_access_scope": "all",
"default_transcribe_language": "detect",
"save_media": true,
"save_dialog": true,
"provision_type": "scim_auto",
"request_insight_extract_type": "custom"
},
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}
],
"page": {
"offset": 1,
"limit": 1,
"total": 1
}
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
GET
/v2/workspaces/{slug}/quotaCheck workspace usage and limits
View the current usage and limits of your workspace.
Parameters
slugRequiredstringpathWorkspace slug
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace/quota" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
planRequiredApiSubscriptionPlanCurrently active subscription plan.codeRequiredstringSubscription plan code.planRequiredstringHuman-readable subscription plan name.usage_reset_cycleRequiredSubscriptionCycleCycle on which included usage is reset.priceRequiredApiSubscriptionPlanPriceSubscription plan price information.includedRequiredApiSubscriptionPlanIncludedResources included in the subscription plan.featuresRequiredSubscriptionPlanFeature[]Features enabled for the subscription plan.purchase_policyRequiredApiSubscriptionPlanPurchasePolicySubscription plan purchase policy.usage_periodRequiredApiWorkspaceQuotaUsagePeriodCurrent usage period.start_dateRequiredstring (date)Usage period start date.end_dateRequiredstring (date)Usage period end date.quotaRequiredApiWorkspaceQuotaMetricsQuota provided by the current plan.seatRequiredintegerNumber of archivist members.viewerRequiredinteger | nullNumber of viewer members, or null when unlimited.recording_secondsRequirednumberRecording time in seconds.usageRequiredApiWorkspaceQuotaMetricsCurrent usage.seatRequiredintegerNumber of archivist members.viewerRequiredinteger | nullNumber of viewer members, or null when unlimited.recording_secondsRequirednumberRecording time in seconds.remainingRequiredApiWorkspaceQuotaMetricsCurrent remaining quota.seatRequiredintegerNumber of archivist members.viewerRequiredinteger | nullNumber of viewer members, or null when unlimited.recording_secondsRequirednumberRecording time in seconds.allows_overageRequiredbooleanWhether recording usage beyond the limit can be billed later.rate_limitRequiredApiWorkspaceRateLimitV2 public API request limit policy.scopestringScope used to apply the request limit.limitRequiredintegerMaximum number of requests allowed within the fixed window.window_secondsRequiredintegerLength of the fixed request-counting window in seconds.
Response example
{
"plan": {
"code": "string",
"plan": "string",
"usage_reset_cycle": "monthly",
"price": {
"base": 1,
"seat": 1,
"recording_minutes": 1
},
"included": {
"seat": 1,
"viewer": 1,
"unlimited_viewer": true,
"recording_minutes": 1,
"labels": 1,
"restricted_event_words": 1
},
"features": [
"ai_recording"
],
"purchase_policy": {
"additional_seat": true
}
},
"usage_period": {
"start_date": "2026-08-27",
"end_date": "2026-08-27"
},
"quota": {
"seat": 1,
"viewer": 1,
"recording_seconds": 1
},
"usage": {
"seat": 1,
"viewer": 1,
"recording_seconds": 1
},
"remaining": {
"seat": 1,
"viewer": 1,
"recording_seconds": 1
},
"allows_overage": true,
"rate_limit": {
"scope": "workspace",
"limit": 1,
"window_seconds": 1
}
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |
GET
/v2/workspaces/{slug}Workspace details inquiry
Retrieve details of the workspace identified by the slug.
Parameters
slugRequiredstringpathWorkspace slug
Request example
curl --request GET \
--url "https://api.callabo.ai/v2/workspaces/your-workspace" \
--header "Accept: application/json" \
--header "Authorization: Bearer $CALLABO_PAT"Success responses
Response body
idRequiredintegerWorkspace identifier.slugRequiredstringCurrent workspace slug used in the request path.nameRequiredstringWorkspace name.emailstring | nullWorkspace contact email address.billing_emailRequiredstringWorkspace billing email address.keywordsRequiredstring[]Default workspace keywords.colorRequiredstringWorkspace display color.use_2faRequiredbooleanWhether two-factor authentication is enabled.ip_block_typeRequiredIpBlockTypeWorkspace IP access restriction mode.statusRequiredWorkspaceStatusWorkspace status.referrer_codestring | nullWorkspace referral code.domainsRequiredstring[]Email domains registered to the workspace.pat_enabledRequiredbooleanWhether workspace-scoped APIs can be called using a personal access token.base_roleRequiredBaseWorkspaceRoleRequester's default workspace role.settingsRequiredV2WorkspaceSettingsDefault record and retention settings for the workspace.default_access_scopeRequiredDefaultAccessScopeDefault access scope for new records.default_transcribe_languageRequiredTranscribeLanguageDefault transcription language for new records.save_mediaRequiredbooleanWhether the original media is stored.save_dialogRequiredbooleanWhether the transcript is stored.provision_typeRequiredProvisionTypeMember provisioning method.max_device_session_countinteger | nullMaximum number of device sessions per member.request_insight_extract_typeRequiredWorkspaceInsightExtractTypeDefault insight generation type.default_custom_insight_template_idinteger | nullDefault custom insight template identifier.record_lifecycle_daysinteger | nullNumber of days to retain the record.media_lifecycle_daysinteger | nullNumber of days to retain the original media.dialog_lifecycle_daysinteger | nullNumber of days to retain the transcript.created_atRequiredstring (date-time)Date and time when the workspace was created.updated_atRequiredstring (date-time)Date and time when the workspace was last updated.
Response example
{
"id": 1,
"slug": "your-workspace",
"name": "Example",
"billing_email": "developer@example.com",
"keywords": [
"string"
],
"color": "string",
"use_2fa": true,
"ip_block_type": "none",
"status": "created",
"domains": [
"string"
],
"pat_enabled": true,
"base_role": "workspace_manager",
"settings": {
"default_access_scope": "all",
"default_transcribe_language": "detect",
"save_media": true,
"save_dialog": true,
"provision_type": "scim_auto",
"request_insight_extract_type": "custom"
},
"created_at": "2026-08-27T03:00:00Z",
"updated_at": "2026-08-27T03:00:00Z"
}Errors
| Status | Error code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Unauthenticated request |
| 403 | FORBIDDEN | Insufficient requester permissions |
| 404 | WORKSPACE_NOT_FOUND | Not found |
| 422 | VALIDATION_ERROR | Unprocessable content |
| 429 | RATE_LIMIT_EXCEEDED | Request limit exceededLearn more |