Wie du Aufnahmen mit Ordnern und Tags organisierst
Ordner und Tags sorgen dafür, dass eine wachsende Zahl von Aufnahmen auffindbar bleibt, und über Ordner entscheidest du, wer was sieht. Diese Anleitung zeigt, wie du Ordner findest, Aufnahmen einsortierst, Ordner für Nutzer und Teams freigibst und Aufnahmen und Termine mit Tags kennzeichnest. Am Ende steht ein komplettes Skript.
Jedes Beispiel funktioniert so, wie es dasteht, sobald SALLY_TOKEN und DIRECTORY_ID gesetzt sind, siehe Schnellstart. Wähl deine Sprache einmal, alle Beispiele im API-Bereich folgen ihr.
Schnellnavigation
- Ordner finden
- Aufnahmen hinzufügen und entfernen
- Aufnahmen eines Ordners auflisten
- Ordner umbenennen oder verschieben
- Ordner freigeben
- Tags
- Komplettes Skript
- Endpunkte im Überblick
1. Ordner finden
Ordner bilden einen Baum: Ein Ordner kann einen übergeordneten Ordner haben (parentFolderId), und eine Aufnahme lässt sich einem Ordner hinzufügen und wieder daraus entfernen. GET/v1.0/directories/{directoryId}/folders liefert deine persönlichen, geteilten und Team-Ordner in einer geblätterten Liste.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
search | string | Teilstring-Suche im Ordnernamen, ohne Beachtung der Groß- und Kleinschreibung. | |
parentRecordingFolderId | string | Nur die direkten Unterordner dieses Ordners. Weglassen für alle Ordner. | |
page | integer | 1 | Seitennummer, beginnend bei 1. |
pageSize | integer | 25 | Einträge je Seite, höchstens 100. |
Diese Anfrage sucht Ordner, deren Name „sales" enthält:
- cURL
- JavaScript
- Python
curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders?search=sales" \
-H "Authorization: Bearer $SALLY_TOKEN"
const url = new URL(`https://api.sally.io/v1.0/directories/${directoryId}/folders`);
url.searchParams.set('search', 'sales');
const response = await fetch(url, {
headers: {Authorization: `Bearer ${process.env.SALLY_TOKEN}`},
});
const {items} = await response.json();
import os
import requests
response = requests.get(
f"https://api.sally.io/v1.0/directories/{directory_id}/folders",
params={"search": "sales"},
headers={"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"},
)
data = response.json()
{
"page": 1,
"pageSize": 25,
"total": 1,
"hasMore": false,
"items": [
{
"folderId": "f0186448-90aa-4df8-a13d-17a832c35c28",
"name": "Sales calls",
"description": "Kundengespräche des Vertriebsteams",
"ownerUserId": "eece96ba-87a6-4f16-a07d-a7720d671312",
"parentFolderId": null,
"isOwner": true,
"isFavorite": false,
"accessLevel": "readWrite",
"recordingsCount": 3,
"createdOn": "2026-09-24T09:30:00Z",
"modifiedOn": "2026-09-24T09:30:00Z"
}
]
}
| Feld | Typ | Bedeutung |
|---|---|---|
folderId | string | Id des Ordners. |
name | string | Anzeigename des Ordners. |
description | string oder null | Beschreibung, null, wenn nicht gesetzt. |
ownerUserId | string | Id der Person, der der Ordner gehört. |
parentFolderId | string oder null | Id des übergeordneten Ordners, null bei einem Ordner auf oberster Ebene. |
isOwner | boolean | true, wenn dir der Ordner gehört. |
isFavorite | boolean | true, wenn du den Ordner als Favorit markiert hast. |
accessLevel | string | Dein tatsächlicher Zugriff: none, read oder readWrite. |
recordingsCount | number | Anzahl der Aufnahmen im Ordner. |
createdOn | string | Zeitpunkt der Erstellung (ISO 8601). |
modifiedOn | string | Zeitpunkt der letzten Änderung (ISO 8601). |
POST/v1.0/directories/{directoryId}/folders/search nimmt dieselben Filter (search, parentRecordingFolderId, page, pageSize) im Request-Body, siehe Such-Endpunkte.
2. Aufnahmen hinzufügen und entfernen
PUT/v1.0/directories/{directoryId}/folders/{folderId}/recordings/{recordingId} legt eine Aufnahme in einen Ordner, DELETE/v1.0/directories/{directoryId}/folders/{folderId}/recordings/{recordingId} nimmt sie wieder heraus. Beide brauchen Schreibzugriff auf den Ordner und antworten mit 204 ohne Body. Das Hinzufügen ist idempotent, ein doppelter Aufruf schadet also nicht. Gibt es die Aufnahme im Unternehmenskonto nicht, bekommst du 404.
- cURL
- JavaScript
- Python
# Hinzufügen
curl -X PUT "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders/$FOLDER_ID/recordings/$RECORDING_ID" \
-H "Authorization: Bearer $SALLY_TOKEN"
# Entfernen
curl -X DELETE "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders/$FOLDER_ID/recordings/$RECORDING_ID" \
-H "Authorization: Bearer $SALLY_TOKEN"
const path = `https://api.sally.io/v1.0/directories/${directoryId}/folders/${folderId}/recordings/${recordingId}`;
const headers = {Authorization: `Bearer ${process.env.SALLY_TOKEN}`};
await fetch(path, {method: 'PUT', headers}); // hinzufügen, 204
await fetch(path, {method: 'DELETE', headers}); // entfernen, 204
import os
import requests
url = f"https://api.sally.io/v1.0/directories/{directory_id}/folders/{folder_id}/recordings/{recording_id}"
headers = {"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"}
requests.put(url, headers=headers).raise_for_status() # hinzufügen, 204
requests.delete(url, headers=headers).raise_for_status() # entfernen, 204
3. Aufnahmen eines Ordners auflisten
GET/v1.0/directories/{directoryId}/folders/{folderId}/recordings liefert die Aufnahmen eines Ordners, die neueste zuerst. Mit includeSubfolders=true kommen auch die Aufnahmen aller zugänglichen Unterordner dazu, ohne Duplikate.
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
includeSubfolders | boolean | false | true schließt die Aufnahmen aller verschachtelten Unterordner ein. |
page | integer | 1 | Seitennummer, beginnend bei 1. |
pageSize | integer | 25 | Einträge je Seite, höchstens 100. |
- cURL
- JavaScript
- Python
curl "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders/$FOLDER_ID/recordings?includeSubfolders=true&pageSize=100" \
-H "Authorization: Bearer $SALLY_TOKEN"
const url = new URL(
`https://api.sally.io/v1.0/directories/${directoryId}/folders/${folderId}/recordings`,
);
url.searchParams.set('includeSubfolders', 'true');
url.searchParams.set('pageSize', '100');
const response = await fetch(url, {
headers: {Authorization: `Bearer ${process.env.SALLY_TOKEN}`},
});
const {items, hasMore} = await response.json();
import os
import requests
response = requests.get(
f"https://api.sally.io/v1.0/directories/{directory_id}/folders/{folder_id}/recordings",
params={"includeSubfolders": "true", "pageSize": 100},
headers={"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"},
)
data = response.json()
{
"page": 1,
"pageSize": 100,
"total": 3,
"hasMore": false,
"items": [
{
"recordingId": "53e2e041-4b34-41c7-a285-634d80b3675d",
"durationInSeconds": 1843,
"isManualUpload": false,
"appointmentId": "d4398f97-cd92-4d21-a6ec-4aab0a85441b",
"createdOn": "2026-09-24T09:30:00Z"
}
]
}
| Feld | Typ | Bedeutung |
|---|---|---|
recordingId | string | Id der Aufnahme. Details holst du mit GET …/recordings/{recordingId}. |
durationInSeconds | number oder null | Dauer in Sekunden, null, wenn unbekannt. |
isManualUpload | boolean | true, wenn die Aufnahme manuell hochgeladen wurde (ohne Meeting-Bot). |
appointmentId | string oder null | Dein eigener Termin zur Aufnahme, null, wenn es keinen gibt. |
createdOn | string | Zeitpunkt der Erstellung (ISO 8601, UTC). |
4. Ordner umbenennen oder verschieben
PATCH/v1.0/directories/{directoryId}/folders/{folderId} ändert Namen, Beschreibung oder die Position eines Ordners im Baum. Geändert werden nur die Felder, die du mitschickst, die Freigaben bleiben unberührt. Du brauchst Schreibzugriff auf den Ordner.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Neuer Ordnername. |
description | string oder null | Neue Beschreibung. null leert sie. |
parentFolderId | string oder null | Verschiebt den Ordner unter diesen übergeordneten Ordner. null macht ihn zu einem Ordner auf oberster Ebene. |
- cURL
- JavaScript
- Python
curl -X PATCH "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders/$FOLDER_ID" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"parentFolderId": "bf7cd0f0-3c69-4690-a956-9c30b123ab30"}'
const response = await fetch(
`https://api.sally.io/v1.0/directories/${directoryId}/folders/${folderId}`,
{
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.SALLY_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({parentFolderId: 'bf7cd0f0-3c69-4690-a956-9c30b123ab30'}),
},
);
const folder = await response.json();
import os
import requests
response = requests.patch(
f"https://api.sally.io/v1.0/directories/{directory_id}/folders/{folder_id}",
headers={"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"},
json={"parentFolderId": "bf7cd0f0-3c69-4690-a956-9c30b123ab30"},
)
folder = response.json()
Die Antwort ist der geänderte Ordner, in derselben Form wie die Einträge unter Ordner finden.
5. Ordner freigeben
Freigegeben wird auf Ordnerebene, an einzelne Nutzer oder an ganze Teams. Das ist der praktische Weg, einer Abteilung eine Reihe von Meetings zu öffnen, ohne jede Aufnahme einzeln anzufassen. PUT/v1.0/directories/{directoryId}/folders/{folderId}/shares setzt die Freigaben und ersetzt dabei die komplette Liste. Nur der Owner des Ordners darf Freigaben ändern.
| Feld | Typ | Beschreibung |
|---|---|---|
userShares | array | Pflicht. Direkte Freigaben an Nutzer, jeweils {"userId": "…", "accessLevel": "…"}. |
teamShares | array | Pflicht. Freigaben an Teams, jeweils {"teamId": "…", "accessLevel": "…"}. |
accessLevel ist none, read oder readWrite. Um eine Freigabe hinzuzufügen, ohne die anderen zu verlieren, lies zuerst die aktuellen Freigaben mit GET/v1.0/directories/{directoryId}/folders/{folderId}/shares, ergänz deine und schick beide Listen zurück.
Diese Anfrage gibt einem Team Lesezugriff und einer Person Schreibzugriff:
- cURL
- JavaScript
- Python
curl -X PUT "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/folders/$FOLDER_ID/shares" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"userShares": [
{"userId": "11f967df-7dd1-4719-a9aa-46530940c443", "accessLevel": "readWrite"}
],
"teamShares": [
{"teamId": "3c35d421-a578-4ce7-aebb-c5add21907bd", "accessLevel": "read"}
]
}'
const response = await fetch(
`https://api.sally.io/v1.0/directories/${directoryId}/folders/${folderId}/shares`,
{
method: 'PUT',
headers: {
Authorization: `Bearer ${process.env.SALLY_TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
userShares: [{userId: '11f967df-7dd1-4719-a9aa-46530940c443', accessLevel: 'readWrite'}],
teamShares: [{teamId: '3c35d421-a578-4ce7-aebb-c5add21907bd', accessLevel: 'read'}],
}),
},
);
const shares = await response.json();
import os
import requests
response = requests.put(
f"https://api.sally.io/v1.0/directories/{directory_id}/folders/{folder_id}/shares",
headers={"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"},
json={
"userShares": [{"userId": "11f967df-7dd1-4719-a9aa-46530940c443", "accessLevel": "readWrite"}],
"teamShares": [{"teamId": "3c35d421-a578-4ce7-aebb-c5add21907bd", "accessLevel": "read"}],
},
)
shares = response.json()
Die Antwort enthält die resultierenden Freigaben und dazu die Freigaben, die der Ordner von übergeordneten Ordnern erbt:
{
"userShares": [
{"userId": "11f967df-7dd1-4719-a9aa-46530940c443", "accessLevel": "readWrite"}
],
"teamShares": [
{"teamId": "3c35d421-a578-4ce7-aebb-c5add21907bd", "accessLevel": "read"}
],
"inheritedShares": [
{
"userId": "11f967df-7dd1-4719-a9aa-46530940c443",
"accessLevel": "read",
"inheritedFromFolderId": "a1ae243c-6bc2-4da4-a5d7-d70c50ba1acc"
}
]
}
inheritedShares stammen aus übergeordneten Ordnern und sind nur lesbar, hier kannst du sie nicht setzen. Freigaben enthalten nur Ids. Nutzer löst du über die Mitgliedschafts-Endpunkte auf, Teams über die Team-Endpunkte.
6. Tags
Tags sind Etiketten an Terminen und Aufnahmen. Sie werden einmal je Unternehmenskonto im Tag-Katalog angelegt, tragen eine Farbe aus einer festen Palette (zum Beispiel blue oder green) und werden danach per Id zugewiesen. Den Katalog verwalten Admins und Owner.
GET/v1.0/directories/{directoryId}/tags liefert alle aktiven Tags des Katalogs, die meistgenutzten zuerst:
{
"items": [
{"tagId": "18063a7e-a82b-4972-a850-f866b8b4a046", "name": "Kunde", "colorCode": "indigo"}
]
}
POST/v1.0/directories/{directoryId}/tags legt einen Tag im Katalog an. Namen werden ohne Beachtung der Groß- und Kleinschreibung dedupliziert.
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Pflicht. Anzeigename, höchstens 100 Zeichen. |
colorCode | string oder null | Ein Farbname aus der Palette, kein Hex-Wert: indigo, purple, fuchsia, pink, rose, red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, slate, gray, zinc, stone oder neutral. Ein unbekannter Schlüssel erscheint in der neutralen Standardfarbe. GET/v1.0/directories/{directoryId}/tags/colors listet die Palette. |
PUT/v1.0/directories/{directoryId}/recordings/{recordingId}/tags und PUT/v1.0/directories/{directoryId}/appointments/{appointmentId}/tags weisen Tags mit einem Body aus tagIds zu:
- cURL
- JavaScript
- Python
# Tag anlegen (Admin oder Owner)
curl -X POST "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/tags" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Kunde", "colorCode": "indigo"}'
# Einer Aufnahme zuweisen
curl -X PUT "https://api.sally.io/v1.0/directories/$DIRECTORY_ID/recordings/$RECORDING_ID/tags" \
-H "Authorization: Bearer $SALLY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tagIds": ["18063a7e-a82b-4972-a850-f866b8b4a046"]}'
const base = `https://api.sally.io/v1.0/directories/${directoryId}`;
const headers = {
Authorization: `Bearer ${process.env.SALLY_TOKEN}`,
'Content-Type': 'application/json',
};
// Tag anlegen (Admin oder Owner)
const tag = await fetch(`${base}/tags`, {
method: 'POST',
headers,
body: JSON.stringify({name: 'Kunde', colorCode: 'indigo'}),
}).then((r) => r.json());
// Einer Aufnahme zuweisen
const tags = await fetch(`${base}/recordings/${recordingId}/tags`, {
method: 'PUT',
headers,
body: JSON.stringify({tagIds: [tag.tagId]}),
}).then((r) => r.json());
import os
import requests
base = f"https://api.sally.io/v1.0/directories/{directory_id}"
headers = {"Authorization": f"Bearer {os.environ['SALLY_TOKEN']}"}
# Tag anlegen (Admin oder Owner)
tag = requests.post(
f"{base}/tags", headers=headers, json={"name": "Kunde", "colorCode": "indigo"}
).json()
# Einer Aufnahme zuweisen
tags = requests.put(
f"{base}/recordings/{recording_id}/tags", headers=headers, json={"tagIds": [tag["tagId"]]}
).json()
Die Zuweisung antwortet mit den Tags als Array:
[
{"tagId": "18063a7e-a82b-4972-a850-f866b8b4a046", "name": "Kunde", "colorCode": "indigo"}
]
Beim Zuweisen wird die komplette Tag-Liste ersetzt, und es werden nur Ids vorhandener Tags angenommen. Leg einen fehlenden Tag also zuerst an und weise ihn dann zu. Eine Aufnahme oder ein Termin kann bis zu 20 eigene Tags tragen.
Eine Aufnahme kann außerdem Tags von ihren verknüpften Terminen und deren Serien erben. Diese bleiben dynamisch, der Aufruf an der Aufnahme setzt nur ihre direkten Tags. Serien-Tags liegen am Serienmaster und werden nicht an einem einzelnen Termin gesetzt. Das Feld tags einer Aufnahme listet ihre wirksamen Tags, eigene und geerbte. Bau die Liste, die du zuweist, deshalb aus deinen eigenen Daten, statt dieses Feld zu kopieren.
7. Komplettes Skript
Dieses Skript sortiert eine Aufnahme per Ordnername in einen Ordner und gibt ihr eine Reihe von Tags per Name. Es findet den Ordner über eine Suche, schlägt jeden Tag ohne Beachtung der Groß- und Kleinschreibung im Katalog nach, legt fehlende Tags an (dieser Teil braucht einen Token von Admin oder Owner) und weist dann die komplette Liste zu. Setz vor dem Start RECORDING_ID, FOLDER_NAME und TAG_NAMES (kommagetrennt).
- cURL
- JavaScript
- Python
#!/usr/bin/env bash
# Braucht SALLY_TOKEN, DIRECTORY_ID, RECORDING_ID, FOLDER_NAME, TAG_NAMES sowie jq.
set -euo pipefail
BASE="https://api.sally.io/v1.0/directories/$DIRECTORY_ID"
AUTH="Authorization: Bearer $SALLY_TOKEN"
# 1. Ordner über den exakten Namen finden (ohne Groß- und Kleinschreibung) und Aufnahme einsortieren.
folder_id=$(curl -s -G "$BASE/folders" -H "$AUTH" --data-urlencode "search=$FOLDER_NAME" \
| jq -r --arg n "$FOLDER_NAME" '.items[] | select((.name | ascii_downcase) == ($n | ascii_downcase)) | .folderId' | head -n1)
[ -n "$folder_id" ] || { echo "Ordner nicht gefunden: $FOLDER_NAME" >&2; exit 1; }
curl -s -X PUT "$BASE/folders/$folder_id/recordings/$RECORDING_ID" -H "$AUTH"
# 2. Tag-Namen in Ids auflösen, fehlende Tags anlegen.
catalog=$(curl -s "$BASE/tags" -H "$AUTH")
tag_ids=()
IFS=',' read -ra names <<< "$TAG_NAMES"
for name in "${names[@]}"; do
id=$(echo "$catalog" | jq -r --arg n "$name" '.items[] | select((.name | ascii_downcase) == ($n | ascii_downcase)) | .tagId' | head -n1)
if [ -z "$id" ]; then
id=$(curl -s -X POST "$BASE/tags" -H "$AUTH" -H "Content-Type: application/json" \
-d "$(jq -n --arg n "$name" '{name: $n}')" | jq -r '.tagId')
fi
tag_ids+=("$id")
done
# 3. Komplette Liste zuweisen.
curl -s -X PUT "$BASE/recordings/$RECORDING_ID/tags" -H "$AUTH" -H "Content-Type: application/json" \
-d "$(printf '%s\n' "${tag_ids[@]}" | jq -R . | jq -s '{tagIds: .}')" | jq .
// organize.mjs, braucht SALLY_TOKEN, DIRECTORY_ID, RECORDING_ID, FOLDER_NAME, TAG_NAMES.
const BASE = `https://api.sally.io/v1.0/directories/${process.env.DIRECTORY_ID}`;
const {RECORDING_ID, FOLDER_NAME, TAG_NAMES} = process.env;
async function sally(method, path, body) {
const response = await fetch(`${BASE}${path}`, {
method,
headers: {
Authorization: `Bearer ${process.env.SALLY_TOKEN}`,
...(body ? {'Content-Type': 'application/json'} : {}),
},
body: body ? JSON.stringify(body) : undefined,
});
if (!response.ok) throw new Error(`${method} ${path}: ${response.status} ${await response.text()}`);
return response.status === 204 ? null : response.json();
}
const same = (a, b) => a.toLowerCase() === b.toLowerCase();
// 1. Ordner finden und Aufnahme einsortieren.
const folders = await sally('GET', `/folders?search=${encodeURIComponent(FOLDER_NAME)}&pageSize=100`);
const folder = folders.items.find((f) => same(f.name, FOLDER_NAME));
if (!folder) throw new Error(`Ordner nicht gefunden: ${FOLDER_NAME}`);
await sally('PUT', `/folders/${folder.folderId}/recordings/${RECORDING_ID}`);
// 2. Tag-Namen in Ids auflösen, fehlende Tags anlegen.
const catalog = (await sally('GET', '/tags')).items;
const tagIds = [];
for (const name of TAG_NAMES.split(',').map((n) => n.trim()).filter(Boolean)) {
const tag = catalog.find((t) => same(t.name, name)) ?? (await sally('POST', '/tags', {name}));
tagIds.push(tag.tagId);
}
// 3. Komplette Liste zuweisen.
const tags = await sally('PUT', `/recordings/${RECORDING_ID}/tags`, {tagIds});
console.log(`Einsortiert in "${folder.name}", Tags:`, tags.map((t) => t.name).join(', '));
# organize.py, braucht SALLY_TOKEN, DIRECTORY_ID, RECORDING_ID, FOLDER_NAME, TAG_NAMES.
import os
import requests
BASE = f"https://api.sally.io/v1.0/directories/{os.environ['DIRECTORY_ID']}"
recording_id = os.environ["RECORDING_ID"]
folder_name = os.environ["FOLDER_NAME"]
tag_names = [n.strip() for n in os.environ["TAG_NAMES"].split(",") if n.strip()]
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['SALLY_TOKEN']}"
def sally(method, path, body=None, params=None):
response = session.request(method, f"{BASE}{path}", json=body, params=params)
response.raise_for_status()
return None if response.status_code == 204 else response.json()
# 1. Ordner finden und Aufnahme einsortieren.
folders = sally("GET", "/folders", params={"search": folder_name, "pageSize": 100})["items"]
folder = next((f for f in folders if f["name"].lower() == folder_name.lower()), None)
if folder is None:
raise SystemExit(f"Ordner nicht gefunden: {folder_name}")
sally("PUT", f"/folders/{folder['folderId']}/recordings/{recording_id}")
# 2. Tag-Namen in Ids auflösen, fehlende Tags anlegen.
catalog = sally("GET", "/tags")["items"]
tag_ids = []
for name in tag_names:
tag = next((t for t in catalog if t["name"].lower() == name.lower()), None)
if tag is None:
tag = sally("POST", "/tags", {"name": name})
tag_ids.append(tag["tagId"])
# 3. Komplette Liste zuweisen.
tags = sally("PUT", f"/recordings/{recording_id}/tags", {"tagIds": tag_ids})
print(f"Einsortiert in \"{folder['name']}\", Tags:", ", ".join(t["name"] for t in tags))
8. Endpunkte im Überblick
Jeder Eintrag führt zur Referenz, wo du die Anfrage mit deinem eigenen Token senden kannst.
Ordner
- GET
…/foldersListet die Aufnahmeordner auf, auf die der Aufrufer zugreifen kann (paginiert, optional gefiltert)Ausprobieren - POST
…/folders/searchDurchsucht Aufnahmeordner (Parameter im Body)Ausprobieren - GET
…/folders/{folderId}Gibt einen einzelnen Aufnahmeordner zurückAusprobieren - PATCH
…/folders/{folderId}Aktualisiert einen Aufnahmeordner (Name, Beschreibung, übergeordneter Ordner)Ausprobieren - GET
…/folders/{folderId}/recordingsListet die Aufnahmen in einem Ordner auf (paginiert)Ausprobieren - PUT
…/folders/{folderId}/recordings/{recordingId}Fügt eine Aufnahme zu einem Ordner hinzuAusprobieren - DELETE
…/folders/{folderId}/recordings/{recordingId}Entfernt eine Aufnahme aus einem OrdnerAusprobieren - GET
…/folders/{folderId}/sharesGibt die Freigaben eines Aufnahmeordners zurückAusprobieren - PUT
…/folders/{folderId}/sharesSetzt die Freigaben eines Aufnahmeordners (vollständiges Ersetzen)Ausprobieren
Tags
- GET
…/tagsListet den Tag-Katalog eines Unternehmenskontos auf (meistgenutzte zuerst)Ausprobieren - GET
…/tags/colorsListet die verfügbaren Tag-Farben aufAusprobieren - POST
…/tagsErstellt einen Katalog-Tag mit optionaler Farbe (nur Admin/Owner)Ausprobieren - PATCH
…/tags/{tagId}Benennt einen Katalog-Tag um und/oder ändert seine Farbe (nur Admin/Owner)Ausprobieren - DELETE
…/tags/{tagId}Löscht einen Katalog-Tag (nur Admin/Owner)Ausprobieren - PUT
…/recordings/{recordingId}/tagsErsetzt die direkten Tags einer Aufnahme (zuweisen/entfernen)Ausprobieren - PUT
…/appointments/{appointmentId}/tagsErsetzt die Tags eines Termins (zuweisen/entfernen)Ausprobieren