Saved views
Save searches and filters of the links list, for yourself or your team.
A saved view is a name and a set of List links filters. Views are private to the person who saved them unless shared with the workspace. Only the person who saved a view changes it; workspace administrators can also delete shared views.
Every path below starts with https://bgum.me/api/v1/workspaces/{workspaceId}. Send your API key in the Authorization header as described in the API overview.
| Operation | Method and path |
|---|---|
| List saved views | GET /saved-views |
| Save a view | POST /saved-views |
| Change a saved view | PATCH /saved-views/{viewId} |
| Delete a saved view | DELETE /saved-views/{viewId} |
List saved views
GET /saved-views
Lists your views and those shared with the workspace, by name.
- Full path
/api/v1/workspaces/{workspaceId}/saved-views- API key scope
-
links:read - Role needed
- Viewer or above
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspaceId |
string | Yes | Your workspace ID, from Settings → Workspace. |
Example request
curl
curl "https://bgum.me/api/v1/workspaces/$WORKSPACE_ID/saved-views" \
-H "Authorization: Bearer $BGL_API_KEY"
JavaScript
const res = await fetch(`https://bgum.me/api/v1/workspaces/${process.env.WORKSPACE_ID}/saved-views`, {
headers: {
Authorization: `Bearer ${process.env.BGL_API_KEY}`,
},
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(data);
Python
import os
import requests
res = requests.get(
f"https://bgum.me/api/v1/workspaces/{os.environ['WORKSPACE_ID']}/saved-views",
headers={
"Authorization": f"Bearer {os.environ['BGL_API_KEY']}",
},
timeout=30,
)
res.raise_for_status()
print(res.json())
Response
200 OK · application/json
JSON
[
{
"id": "Vw7sPq2LkR0a",
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": true,
"mine": true,
"createdBy": "Sam Taylor",
"createdAt": "2026-10-15T03:20:01.5521+00:00"
}
]
Good to know
- Use query as the query string of List links to get the view's links, e.g. GET /links?search=spring&state=Paused.
Errors
Any request can also return the general errors: 401 for a missing or wrong key, 403 for a missing scope or plan feature, 404 for an unknown workspace and 429 when you're sending too fast.
Save a view
POST /saved-views
Saves a view. Up to 50 per person per workspace.
- Full path
/api/v1/workspaces/{workspaceId}/saved-views- API key scope
-
links:read - Role needed
- Viewer or above
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspaceId |
string | Yes | Your workspace ID, from Settings → Workspace. |
Request body
JSON (Content-Type: application/json). Leave out fields you don't need.
| Name | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Up to 100 characters. |
query |
string | No | List links filters as a query string: search, state, tag, folderId, domainId, campaignId, createdFrom, createdTo and sort. Other parameters (such as page) are dropped. |
shared |
boolean | No | true shows the view to everyone in the workspace. Needs permission to edit links. Default false. |
Example request
curl
curl -X POST "https://bgum.me/api/v1/workspaces/$WORKSPACE_ID/saved-views" \
-H "Authorization: Bearer $BGL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": true
}'
JavaScript
const res = await fetch(`https://bgum.me/api/v1/workspaces/${process.env.WORKSPACE_ID}/saved-views`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BGL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": true
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(data);
Python
import os
import requests
res = requests.post(
f"https://bgum.me/api/v1/workspaces/{os.environ['WORKSPACE_ID']}/saved-views",
headers={
"Authorization": f"Bearer {os.environ['BGL_API_KEY']}",
},
json={
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": True,
},
timeout=30,
)
res.raise_for_status()
print(res.json())
Response
201 Created · application/json
JSON
{
"id": "Vw7sPq2LkR0a",
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": true,
"mine": true,
"createdBy": "Sam Taylor",
"createdAt": "2026-10-15T03:20:01.5521+00:00"
}
Errors
| Status | Code | Meaning |
|---|---|---|
| 422 | view.name_required | The view has no name. |
| 422 | view.name_too_long | The name is longer than 100 characters. |
| 403 | view.share_forbidden | Only people who can edit links can share views with the workspace. |
| 409 | view.too_many | You already have 50 saved views in this workspace. |
Any request can also return the general errors: 401 for a missing or wrong key, 403 for a missing scope or plan feature, 404 for an unknown workspace and 429 when you're sending too fast.
Change a saved view
PATCH /saved-views/{viewId}
Renames a view, changes its filters, or shares or unshares it. Only the person who saved it can.
- Full path
/api/v1/workspaces/{workspaceId}/saved-views/{viewId}- API key scope
-
links:read - Role needed
- Viewer or above
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspaceId |
string | Yes | Your workspace ID, from Settings → Workspace. |
viewId |
string | Yes | The saved view's ID, as returned when it was created or listed. |
Request body
JSON (Content-Type: application/json). Leave out fields you don't need.
| Name | Type | Required | Description |
|---|---|---|---|
name |
string | No | New name. |
query |
string | No | New filters, as when saving. |
shared |
boolean | No | true shares the view with the workspace, false makes it private again. |
Example request
curl
curl -X PATCH "https://bgum.me/api/v1/workspaces/$WORKSPACE_ID/saved-views/Vw7sPq2LkR0a" \
-H "Authorization: Bearer $BGL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"shared": false
}'
JavaScript
const res = await fetch(`https://bgum.me/api/v1/workspaces/${process.env.WORKSPACE_ID}/saved-views/Vw7sPq2LkR0a`, {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.BGL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"shared": false
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();
console.log(data);
Python
import os
import requests
res = requests.patch(
f"https://bgum.me/api/v1/workspaces/{os.environ['WORKSPACE_ID']}/saved-views/Vw7sPq2LkR0a",
headers={
"Authorization": f"Bearer {os.environ['BGL_API_KEY']}",
},
json={
"shared": False,
},
timeout=30,
)
res.raise_for_status()
print(res.json())
Response
200 OK · application/json
JSON
{
"id": "Vw7sPq2LkR0a",
"name": "Paused spring links",
"query": "search=spring&state=Paused",
"shared": false,
"mine": true,
"createdBy": "Sam Taylor",
"createdAt": "2026-10-15T03:20:01.5521+00:00"
}
Errors
| Status | Code | Meaning |
|---|---|---|
| 404 | view.not_found | No saved view with that ID that you can see. |
| 403 | view.not_yours | Someone else saved this view, so only they can change it. |
| 422 | view.name_required | The view has no name. |
| 422 | view.name_too_long | The name is longer than 100 characters. |
| 403 | view.share_forbidden | Only people who can edit links can share views with the workspace. |
Any request can also return the general errors: 401 for a missing or wrong key, 403 for a missing scope or plan feature, 404 for an unknown workspace and 429 when you're sending too fast.
Delete a saved view
DELETE /saved-views/{viewId}
Deletes a view. Only the person who saved it can, or a workspace administrator for a shared view.
- Full path
/api/v1/workspaces/{workspaceId}/saved-views/{viewId}- API key scope
-
links:read - Role needed
- Viewer or above
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
workspaceId |
string | Yes | Your workspace ID, from Settings → Workspace. |
viewId |
string | Yes | The saved view's ID, as returned when it was created or listed. |
Example request
curl
curl -X DELETE "https://bgum.me/api/v1/workspaces/$WORKSPACE_ID/saved-views/Vw7sPq2LkR0a" \
-H "Authorization: Bearer $BGL_API_KEY"
JavaScript
const res = await fetch(`https://bgum.me/api/v1/workspaces/${process.env.WORKSPACE_ID}/saved-views/Vw7sPq2LkR0a`, {
method: "DELETE",
headers: {
Authorization: `Bearer ${process.env.BGL_API_KEY}`,
},
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
// 204 No Content: nothing to read.
Python
import os
import requests
res = requests.delete(
f"https://bgum.me/api/v1/workspaces/{os.environ['WORKSPACE_ID']}/saved-views/Vw7sPq2LkR0a",
headers={
"Authorization": f"Bearer {os.environ['BGL_API_KEY']}",
},
timeout=30,
)
res.raise_for_status()
# 204 No Content: nothing to read.
Response
204 No Content
Errors
| Status | Code | Meaning |
|---|---|---|
| 404 | view.not_found | No saved view with that ID that you can see. |
| 403 | view.not_yours | Someone else saved this view, so only they can change it. |
Any request can also return the general errors: 401 for a missing or wrong key, 403 for a missing scope or plan feature, 404 for an unknown workspace and 429 when you're sending too fast.
Something missing or unclear? Tell us and we'll improve this page.