curl --request POST \
--url https://app.govly.com/api/tools/v1/workspaces/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"cursor": "<string>",
"perPage": 25,
"primaryFocusTypes": [
"opportunity"
],
"includeWithoutPrimaryFocus": true,
"lifecycle": "current",
"statusGroup": "open",
"statusCategories": [],
"workspaceStatusIds": [
"<string>"
],
"participants": [
{
"id": "<string>"
}
],
"participantOperator": "any",
"labelIds": [
"<string>"
],
"excludeLabelIds": [
"<string>"
],
"customFields": [
{
"workspaceColumnId": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://app.govly.com/api/tools/v1/workspaces/search"
payload = {
"query": "<string>",
"cursor": "<string>",
"perPage": 25,
"primaryFocusTypes": ["opportunity"],
"includeWithoutPrimaryFocus": True,
"lifecycle": "current",
"statusGroup": "open",
"statusCategories": [],
"workspaceStatusIds": ["<string>"],
"participants": [{ "id": "<string>" }],
"participantOperator": "any",
"labelIds": ["<string>"],
"excludeLabelIds": ["<string>"],
"customFields": [
{
"workspaceColumnId": "<string>",
"value": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
cursor: '<string>',
perPage: 25,
primaryFocusTypes: ['opportunity'],
includeWithoutPrimaryFocus: true,
lifecycle: 'current',
statusGroup: 'open',
statusCategories: [],
workspaceStatusIds: ['<string>'],
participants: [{id: '<string>'}],
participantOperator: 'any',
labelIds: ['<string>'],
excludeLabelIds: ['<string>'],
customFields: [{workspaceColumnId: '<string>', value: '<string>'}]
})
};
fetch('https://app.govly.com/api/tools/v1/workspaces/search', 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.govly.com/api/tools/v1/workspaces/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'cursor' => '<string>',
'perPage' => 25,
'primaryFocusTypes' => [
'opportunity'
],
'includeWithoutPrimaryFocus' => true,
'lifecycle' => 'current',
'statusGroup' => 'open',
'statusCategories' => [
],
'workspaceStatusIds' => [
'<string>'
],
'participants' => [
[
'id' => '<string>'
]
],
'participantOperator' => 'any',
'labelIds' => [
'<string>'
],
'excludeLabelIds' => [
'<string>'
],
'customFields' => [
[
'workspaceColumnId' => '<string>',
'value' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.govly.com/api/tools/v1/workspaces/search"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.govly.com/api/tools/v1/workspaces/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.govly.com/api/tools/v1/workspaces/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"name": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"status": {
"category": "<string>",
"label": "<string>",
"id": "<string>"
},
"customFields": [
{
"id": "<string>",
"name": "<string>",
"type": "<string>",
"value": "<unknown>"
}
],
"privateAccess": true,
"organization": {
"id": "<string>",
"name": "<string>"
},
"participants": [
{
"type": "user",
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com"
}
],
"labels": [
{
"id": "<string>",
"name": "<string>",
"color": "<string>",
"description": "<string>",
"domain": "<string>"
}
],
"description": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"commentsCount": 123,
"primaryFocus": {
"type": "opportunity",
"id": "<string>"
},
"comments": [
{
"id": "<string>",
"body": "<string>",
"attachments": [
{
"id": "<string>",
"workspaceId": "<string>",
"filename": "<string>",
"commentId": "<string>",
"contentType": "<string>",
"byteSize": 123,
"createdAt": "2023-11-07T05:31:56Z",
"file": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"attachments": [
{
"id": "<string>",
"workspaceId": "<string>",
"filename": "<string>",
"commentId": "<string>",
"contentType": "<string>",
"byteSize": 123,
"createdAt": "2023-11-07T05:31:56Z",
"file": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
}
],
"archivedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"total": 123,
"perPage": 123,
"nextCursor": "<string>"
}
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}Search active workspaces
Searches the authenticated organization’s Active Work with exact totals and opaque cursor pagination. The default scope is current, open workspaces with an opportunity primary focus or no primary focus. Explicit participants narrow organization participation and never grant access. A user participant ID of me selects the authenticated user without embedding their organization-user ID. A workspace without a primary focus is represented by includeWithoutPrimaryFocus; primaryFocusTypes never uses a standalone sentinel.
curl --request POST \
--url https://app.govly.com/api/tools/v1/workspaces/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "<string>",
"cursor": "<string>",
"perPage": 25,
"primaryFocusTypes": [
"opportunity"
],
"includeWithoutPrimaryFocus": true,
"lifecycle": "current",
"statusGroup": "open",
"statusCategories": [],
"workspaceStatusIds": [
"<string>"
],
"participants": [
{
"id": "<string>"
}
],
"participantOperator": "any",
"labelIds": [
"<string>"
],
"excludeLabelIds": [
"<string>"
],
"customFields": [
{
"workspaceColumnId": "<string>",
"value": "<string>"
}
]
}
'import requests
url = "https://app.govly.com/api/tools/v1/workspaces/search"
payload = {
"query": "<string>",
"cursor": "<string>",
"perPage": 25,
"primaryFocusTypes": ["opportunity"],
"includeWithoutPrimaryFocus": True,
"lifecycle": "current",
"statusGroup": "open",
"statusCategories": [],
"workspaceStatusIds": ["<string>"],
"participants": [{ "id": "<string>" }],
"participantOperator": "any",
"labelIds": ["<string>"],
"excludeLabelIds": ["<string>"],
"customFields": [
{
"workspaceColumnId": "<string>",
"value": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
query: '<string>',
cursor: '<string>',
perPage: 25,
primaryFocusTypes: ['opportunity'],
includeWithoutPrimaryFocus: true,
lifecycle: 'current',
statusGroup: 'open',
statusCategories: [],
workspaceStatusIds: ['<string>'],
participants: [{id: '<string>'}],
participantOperator: 'any',
labelIds: ['<string>'],
excludeLabelIds: ['<string>'],
customFields: [{workspaceColumnId: '<string>', value: '<string>'}]
})
};
fetch('https://app.govly.com/api/tools/v1/workspaces/search', 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.govly.com/api/tools/v1/workspaces/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => '<string>',
'cursor' => '<string>',
'perPage' => 25,
'primaryFocusTypes' => [
'opportunity'
],
'includeWithoutPrimaryFocus' => true,
'lifecycle' => 'current',
'statusGroup' => 'open',
'statusCategories' => [
],
'workspaceStatusIds' => [
'<string>'
],
'participants' => [
[
'id' => '<string>'
]
],
'participantOperator' => 'any',
'labelIds' => [
'<string>'
],
'excludeLabelIds' => [
'<string>'
],
'customFields' => [
[
'workspaceColumnId' => '<string>',
'value' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.govly.com/api/tools/v1/workspaces/search"
payload := strings.NewReader("{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.govly.com/api/tools/v1/workspaces/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.govly.com/api/tools/v1/workspaces/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"<string>\",\n \"cursor\": \"<string>\",\n \"perPage\": 25,\n \"primaryFocusTypes\": [\n \"opportunity\"\n ],\n \"includeWithoutPrimaryFocus\": true,\n \"lifecycle\": \"current\",\n \"statusGroup\": \"open\",\n \"statusCategories\": [],\n \"workspaceStatusIds\": [\n \"<string>\"\n ],\n \"participants\": [\n {\n \"id\": \"<string>\"\n }\n ],\n \"participantOperator\": \"any\",\n \"labelIds\": [\n \"<string>\"\n ],\n \"excludeLabelIds\": [\n \"<string>\"\n ],\n \"customFields\": [\n {\n \"workspaceColumnId\": \"<string>\",\n \"value\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"name": "<string>",
"updatedAt": "2023-11-07T05:31:56Z",
"status": {
"category": "<string>",
"label": "<string>",
"id": "<string>"
},
"customFields": [
{
"id": "<string>",
"name": "<string>",
"type": "<string>",
"value": "<unknown>"
}
],
"privateAccess": true,
"organization": {
"id": "<string>",
"name": "<string>"
},
"participants": [
{
"type": "user",
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com"
}
],
"labels": [
{
"id": "<string>",
"name": "<string>",
"color": "<string>",
"description": "<string>",
"domain": "<string>"
}
],
"description": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"commentsCount": 123,
"primaryFocus": {
"type": "opportunity",
"id": "<string>"
},
"comments": [
{
"id": "<string>",
"body": "<string>",
"attachments": [
{
"id": "<string>",
"workspaceId": "<string>",
"filename": "<string>",
"commentId": "<string>",
"contentType": "<string>",
"byteSize": 123,
"createdAt": "2023-11-07T05:31:56Z",
"file": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
}
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"attachments": [
{
"id": "<string>",
"workspaceId": "<string>",
"filename": "<string>",
"commentId": "<string>",
"contentType": "<string>",
"byteSize": 123,
"createdAt": "2023-11-07T05:31:56Z",
"file": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}
}
],
"archivedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"total": 123,
"perPage": 123,
"nextCursor": "<string>"
}
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}{
"errors": [
{
"status": "<string>",
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>"
}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Search workspace name/description, opportunity display name/title, and your organization's text/select custom-field values.
30000Opaque nextCursor from the previous page, bound to the actor and all filters.
x <= 100Primary focus types to include. This beta supports opportunity only.
opportunity Include workspaces whose primary focus is absent.
Workspace lifecycle; source opportunity lifecycle does not affect membership.
current, archived open, closed Exact workspace categories, intersected with statusGroup.
triage, planned, in_progress, completed, canceled Current-organization custom workspace status IDs.
Current-organization users or teams that narrow Active Work participation. A user ID may be me for the authenticated user.
Show child attributes
Show child attributes
any, all Include workspaces with any selected label belonging to the authenticated organization.
Exclude workspaces with any selected label belonging to the authenticated organization.
Typed custom-field filters for the authenticated organization. Text uses contains; select uses is_any_of/is_not_any_of; multiselect uses includes/includes_all/excludes; number uses equals/gt/gte/lt/lte; date uses on/before/after with YYYY-MM-DD. Every type also supports is_set/is_not_set without value. Option operators require an array.
50Show child attributes
Show child attributes
Was this page helpful?