Entwickler
MCP-Server
Der Model Context Protocol (MCP)-Server ermöglicht es KI-Agenten, deine formbase-Formulare mit umfangreichen, schemagesteuerten Tools zu lesen und zu bearbeiten.
Was es ist
MCP ist ein offener Standard, über den KI-Tools eine Verbindung zu externen Diensten herstellen. formbase stellt einen gehosteten MCP-Endpunkt bereit, mit dem sich jeder MCP-kompatible Client verbinden kann – darunter Claude Code, Claude Desktop und Cursor.
Verbindung
URL: https://api.formbase.so/api/mcp (POST, streamable HTTP)
Auth: Bearer <token>Zwei Arten von Bearer-Token funktionieren:
API-Token (
fb_…) — erstellt über API-Tokens. Ideal für den persönlichen Gebrauch und eine schnelle Einrichtung.OAuth-Zugriffstoken (
fbo_…) — wird vom OAuth-Flow ausgestellt. Ideal für Drittanbieter-Apps, die im Auftrag eines Nutzers eine Verbindung herstellen.
Beide sind an genau einen Arbeitsbereich gebunden und erreichen dieselben Tools. Ein Tool-Aufruf, der einen anderen Arbeitsbereich oder
ein Formular darin nennt, schlägt mit FORBIDDEN fehl. OAuth-Token tragen außerdem Scopes (mcp:read,
mcp:write, offline_access), aber heute ist kein Tool davon abhängig — behandle jedes Token als vollen Zugriff
innerhalb seines Arbeitsbereichs.
Tool-Aufrufe sind auf 120 pro Minute pro Token begrenzt, gemeinsam genutzt mit der API: Nur
tools/call verbraucht das Budget, während initialize, tools/list, prompts/ und
kostenlos sind. Bei Überschreitung liefert der Aufruf trotzdem HTTP 200 mit einem fehlgeschlagenen Tool-Ergebnis,
das resources/RATE_LIMITED und ein retryAfterMs trägt — polle mit einem Timer, nie in einer Schleife.
Wo du ein Token bekommst
Öffne OAuth und API-Schlüssel in der Seitenleiste deines Arbeitsbereichs, um API-Tokens zu erstellen und verbundene OAuth-Apps anzuzeigen. Weitere Informationen findest du unter API-Tokens.
Kern-Tools
Jedes Tool wird über tools/list angezeigt, wenn sich ein Client verbindet. Clients, die Schemas bei Bedarf laden, etwa Claude
Code, rufen das vollständige Schema eines Tools ab, sobald eine Aufgabe es braucht. Die folgende Tabelle deckt die Kern-Tools ab, mit
denen die meisten Aufgaben beginnen; load_tools (Kataloge) und load_skill (Domänenleitfäden) dokumentieren den
Rest.
| Tool | Funktion |
|---|---|
| form_list | Formulare in einem Arbeitsbereich auflisten. Unterstützt Ordnerfilter, unscharfe Namenssuche und Cursor-Paginierung. |
| form_get | Vollständige Details zu einem Formular abrufen: Fragen, Cover, Logo und eine Live-Vorschau-URL. |
| form_create | Ein neues leeres Formular in einem Arbeitsbereich erstellen. Gibt eine Vorschau-URL zur Live-Bearbeitung zurück. |
| form_update | Formular-Metadaten aktualisieren: Name, Ordner, Emoji, Cover oder Logo. |
| form_delete | Ein Formular vorläufig löschen (in den Papierkorb verschieben, Freigabelinks widerrufen). |
| form_publish | Ein Formular veröffentlichen, damit es Antworten entgegennehmen kann. Idempotent. |
| workspace_list | Alle Arbeitsbereiche auflisten, auf die dein Token Zugriff hat. |
| workspaceFolder_list | Ordner in einem Arbeitsbereich auflisten. |
| formSubmission_list | Einreichungen für ein Formular mit Paginierung auflisten. Enthält Entwürfe mit Pro und Business; Free listet nur abgeschlossene Antworten auf. |
| fields_list | Listet die Feldschlüssel auf, die ein Request auf einem veröffentlichten Formular ansprechen kann, jeweils mit Werttyp, Optionsschlüsseln und einer Verwendungszeile. Vor request_create aufrufen. |
| request_create | Weist ein veröffentlichtes Formular einer namentlich bekannten empfangenden Person zu: Prefill, gesperrte Felder, Kontext, Zustellung, Ablauf und ein optionaler Callback. |
| request_get | Einen Request lesen: Status, Zeitverlauf und — sobald abgeschlossen — Antworten, indiziert nach Feldschlüssel, plus display. |
| request_list | Requests für ein Formular oder einen ganzen Arbeitsbereich auflisten, gefiltert nach Status, Ergebnis oder deiner eigenen externen ID. |
| editor_getDocument | Die vollständige Dokumentstruktur eines Formulars abrufen: alle Elemente, ihre Typen und Eigenschaften. |
| editor_updateElement | Ein vorhandenes Formularelement bearbeiten: Text ersetzen, Eigenschaften ändern (Titel, Pflichtfeld usw.) oder neu positionieren. |
| editor_deleteElement | Ein Element aus dem Formular entfernen. |
| editor_insertTextQuestion | Eine kurze oder lange Textfrage einfügen. Jeder Fragetyp hat sein eigenes Insert-Tool mit einem präzisen Schema. |
| editor_insertContactQuestion | Eine E-Mail-, Telefonnummer- oder Website-URL-Frage einfügen. |
| editor_insertNumberQuestion · editor_insertDateQuestion | Eine Zahlen- oder Datumsfrage einfügen. |
| editor_insertRadioQuestion · editor_insertCheckboxQuestion · editor_insertSelectQuestion | Einzelauswahl- (Radio), Mehrfachauswahl- (Checkbox) oder Dropdown-Fragen einfügen. |
| editor_insertDecisionQuestion | Fügt die Entscheidungsfrage ein: die Zustimmen/Ablehnen/Änderungswunsch-Auswahl, deren Antwort zu einem Request-Ergebnis wird. Eine von Hand gebaute Radio-Frage erzeugt nie eines. |
| editor_insertRatingQuestion · editor_insertLinearScaleQuestion | Eine Sternbewertungs- oder lineare Skalenfrage einfügen. |
| editor_insertHeader · editor_insertParagraph · editor_insertImage · editor_insertPageDivider | Nicht-Fragen-Inhalte einfügen: Überschriften, Absätze, Bilder und Seitenumbrüche. |
| load_tools | Dokumentation für einen Tool-Katalog laden. Gibt Schemas und Verwendungsmuster für gruppierte Tools zurück. |
| load_skill | Einen Domänenwissen-Leitfaden laden (Themes, Fragetypen, Logikregeln usw.). |
Weitere Insert-Varianten — Uhrzeit, Dateiupload, Unterschrift, Zahlung, Matrix/Raster, Rangordnung, Bildauswahl, Umschalter, Tabelle,
Liste, Zeile, berechnetes Feld, verstecktes Feld, Inline-Variable, eingebettete Inhalte (editor_insertEmbedded für YouTube,
Google Maps oder iframe-Einbettungen) und ein Block für bedingte Logik (editor_insertLogic) — stehen ebenfalls auf
tools/list. Lade load_skill(“question-types”) für den vollständigen Satz, jeweils mit Tool-Name und Feldern.
Bedingte Logik wird mit editor_setLogic im editor-actions-Katalog erstellt.
Tool-Kataloge
Auch diese Tools stehen auf tools/list. Führe load_tools mit einem Katalognamen aus, um erweiterte Dokumentation
(Einführung, vollständige Schemas, Verwendungsmuster, Grenzfälle) für die gruppierten Tools zu erhalten, und rufe sie dann direkt auf.
| Katalog | Enthaltene Tools |
|---|---|
| form-data | formAnalytics_get — aggregierte Metriken (Aufrufe, Einreichungen, Abschlussrate, Aufschlüsselungen nach Gerät, Land, Browser, Quelle). Erfordert den Pro- oder Business-Plan; ohne ihn schlägt der Aufruf mit einer Meldung fehl, die den Plan nennt. |
| form-appearance | formTheme_get, formTheme_set, form_update — Themes pro Modus (hell und dunkel), plus Cover und Logo über form_update. |
| form-behavior | formSettings_get, formSettings_update — Benachrichtigungs-E-Mails, Weiterleitung nach Abschluss, Passwort, Aufbewahrung, Sprache, Zahlung. |
| form-sharing | formShareLink_list, formShareLink_create, formShareLink_update — Freigabelink-CRUD mit Unterstützung für benutzerdefinierte Domains. |
| form-translations | translationLanguage_list, translationDraft_get, translationDraft_update, translationDraft_publish, translationLanguage_delete — mehrsprachiger Entwurf-dann-Veröffentlichen-Workflow. Einen leeren Entwurf zu veröffentlichen ist der einzige Weg, eine Sprache zu depublizieren. |
| form-lifecycle | form_unpublish, form_restore — Lebenszyklus-Operationen über die grundlegenden Veröffentlichungs- und Löschfunktionen hinaus. |
| workspace-management | workspaceFolder_create, workspaceFolder_update, workspaceFolder_delete — Ordner-CRUD über die grundlegenden Listenbefehle hinaus. |
| editor-actions | editor_formatText, editor_setLogic, editor_testLogic — Textformatierung, Erstellung bedingter Logik und Logiksimulation. |
| request-lifecycle | fields_list, request_create, request_get, request_list, request_cancel, request_remind, request_replayCallback, document_create — die gesamte Request-Oberfläche: einen ausstehenden Request zurückziehen, die empfangende Person erinnern, einen Callback erneut abspielen, der nie angekommen ist, einen Dokument-Upload für einen Request reservieren. |
| editor-inserts | Der lange Schwanz der editor_insert*-Tools: Uhrzeit, Umschalter, Datei, Unterschrift, Dokumente-Block, Matrix, Rangordnung, Zahlung, Termin, Bildauswahl, eingebettete Inhalte, Tabelle, Liste, Zeile, berechnetes Feld, verstecktes Feld, Wiederholungsgruppe, Logik und Variable. |
Der Katalog request-lifecycle listet alle acht Request-Tools auf, weil der In-App-Chat ein kleineres Kern-Set anzeigt. Über
diesen Endpunkt sind bereits alle acht über tools/list verfügbar, sodass der Katalog nur Dokumentation hinzufügt.
Skills (Domänenwissen)
Skills sind integrierte Leitfäden, die der Agent über load_skill laden kann. Sie liefern Domänenwissen, das dem Agenten
hilft, bessere Entscheidungen zu treffen – keine Tool-Schemas, sondern Designhinweise und Feldsemantik.
| Skill | Themenbereich |
|---|---|
| question-types | Alle Fragetypen, ihre Felder und wann man sie verwendet. |
| logic-rules | Bedingte Logik: Operatoren, Aktionen, Kombinatoren und Grenzfälle. |
| editing-flows | Muster für die Formularerstellung: Reihenfolge, Seitenumbrüche, Piping. |
| form-best-practices | UX-Richtlinien für effektives Formulardesign. |
| form-themes | Theme-Struktur, Token-Referenz und Styling-Richtlinien. |
| form-settings | Einstellungsreferenz: Benachrichtigungen, E-Mail-Vorlagen, Variablen. |
| analytics | Metrikdefinitionen und Interpretation von Formularanalysen. |
| toon-format | Kompaktes Ausgabeformat für strukturierte Datenanzeige. |
| requests | Requests von A bis Z: Feldschlüssel, Prefill-Wertformen, Zustellung, Dokumente pro Request, Callbacks, Polling und Fehlerbehebung. |
Requests
Ein Request weist ein veröffentlichtes Formular einer namentlich bekannten empfangenden Person zu, mit eigenem Link, eigenen vorausgefüllten Antworten und eigenem Ergebnis. So bittet ein Agent eine echte Person um etwas und erfährt, was sie geantwortet hat.
Einen Request erstellen
Starte immer mit fields_list(formId). Es liefert die ansprechbaren Schlüssel der aktuell veröffentlichten Version des
Formulars, jeweils mit einer usage-Zeile, die sagt, in welches Argument der Schlüssel gehört — sichtbare Fragen gehören in
prefill, versteckte Felder in context. Leite einen Schlüssel niemals aus einem Fragetitel ab, und lies nach
form_publish erneut ein.
{
"formId": "j57...",
"recipient": { "email": "ada@acme.com", "name": "Ada" },
"prefill": { "company_name": "Acme", "plan": "pro" },
"readonly": ["company_name"],
"context": { "crm_id": "A-42" },
"metadata": { "run_id": "exec_918" },
"delivery": "email",
"expiresAt": 1780000000000,
"callbackUrl": "https://hooks.acme.com/formbase",
"idempotencyKey": "po-42"
}Das Ergebnis liefert den Link und die Uhr:
{
"id": "kd7...",
"status": "pending",
"url": "https://form.formbase.so/r/rq_...",
"deliveryStatus": "queued",
"expiresAt": 1780000000000,
"createdAt": 1747000000000,
"deduplicated": false,
"next": "..."
}delivery ist standardmäßig “none”, wodurch du url zur eigenen Zustellung erhältst;
“email” versendet die Einladung und braucht recipient.email auf einem Pro- oder Business-Plan, oder eine der 10
kostenlosen Einladungen eines Free-Kontos. readonly sperrt Felder, die die empfangende Person nicht bearbeiten darf, und
jeder gesperrte Schlüssel muss auch vorausgefüllt sein. context nimmt nur Schlüssel versteckter Felder an, während
metadata undurchsichtige Buchhaltung ist, die bei request_get und im Callback zurückgespiegelt wird.
expiresAt sind Epoch-Millisekunden, standardmäßig 30 Tage im Voraus und maximal 365 Tage. idempotencyKey ist 30
Tage lang arbeitsbereichsweit gültig: derselbe Schlüssel mit demselben Body liefert den ursprünglichen Request mit
deduplicated: true zurück, ein abweichender Body ist ein Konflikt. Jede Antwort trägt außerdem eine next-Zeile,
die dem Agenten sagt, was von hier aus zu tun ist.
deliveryStatus ist not_requested, bis eine Einladung eingereiht wird, dann queued →
sent oder failed, und bounced, sobald der Mail-Anbieter einen Hard Bounce oder eine Beschwerde
meldet. Einen Request zu erstellen verbraucht eine Einheit des monatlichen Kontingents des Arbeitsbereichs, egal ob die empfangende Person
je antwortet; ist es aufgebraucht, schlägt request_create mit MONTHLY_ALLOWANCE_REACHED fehl.
Callbacks oder Polling
Mit einer callbackUrl sendet formbase einmal pro Endzustand — Abschluss, Ablauf, Stornierung — einen POST, signiert mit dem
Request-Signaturgeheimnis des Arbeitsbereichs. Siehe Callbacks und Signierung für die Payload und das
Verifizierungsrezept.
Autonome Agenten sollten pollen
Das Request-Signaturgeheimnis erscheint ausschließlich auf der Credentials-Seite deines Arbeitsbereichs — es wird niemals über MCP oder
die API zurückgegeben. Ein Agent, der eigenständig läuft, ohne dass ein Mensch einen Empfänger aufsetzt und konfiguriert, kann einen
Callback daher nicht verifizieren. Lass callbackUrl weg und polle stattdessen request_get(requestId), eher im
Minuten- als im Sekundentakt, bis status “pending” verlässt. expiresAt begrenzt, wie lange sich
das lohnt.
Testmodus
Übergib test: true, um die gesamte Verkabelung vor einem echten Lauf durchzuspielen. Der Link öffnet sich weiterhin und lässt
sich abschließen, und der Callback feuert mit “test”: true — aber es wird nichts per E-Mail versendet, egal was
delivery sagt, der Request bleibt auf der Requests-Seite und im Analytics-Funnel verborgen, und seine Einreichung zählt
nirgends: kein Kontingent, keine Exporte, keine Integrationen. Testanfragen erscheinen in request_list nur, wenn du
includeTest: true übergibst. Der Link schließt sich innerhalb von 24 Stunden, und auf Free darf ein Workspace 10 Testanfragen
pro Tag erstellen.
Dokumente pro Request
Um einer empfangenden Person eine Datei zu übergeben — einen Vertragsentwurf, ihr eigenes Angebot — braucht das Formular einen
Dokumente-Block, den ein Autor oder ein Agent mit editor_insertDocumentsBlock einfügt.
fields_list meldet ihn als type: “documents”. Die Bytes wandern nie durch ein Tool:
Rufe
document_createauf mitformId,name,contentTypeund der exaktensizein Bytes. Du bekommst{ id, name, contentType, size, uploadUrl, expiresAt }zurück. Nur PDF und Bilder (keine Office-Dokumente), 25 MB pro Datei und 100 MB Dokumente pro Request.PUTe die rohen Bytes innerhalb einer Stunde anuploadUrl, mitContent-Typeauf den deklarierten Typ gesetzt.Referenziere sie von
request_createaus:documents: [{ documentId, field?, name? }].fieldist der Feldschlüssel des Dokumente-Blocks, nur optional, wenn das Formular genau einen solchen Block hat.nameüberschreibt den Anzeigenamen für diesen Request.
Die vom Autor hinterlegten Dokumente bleiben unverändert, und deine erscheinen darunter, nur für diese empfangende Person.
request_create prüft den Upload, bevor der Request existiert, sodass DOCUMENT_NOT_UPLOADED bedeutet, dass
Schritt 2 übersprungen wurde. Ein Upload kann von beliebig vielen Requests referenziert werden, und seine Bytes zählen gegen deinen
Workspace-Speicher.
Benutzerdefinierte Domains
Übergib domainId an request_create, um den Link auf einer der
benutzerdefinierten Domains des Arbeitsbereichs zu erstellen. Die IDs kommen von
formShareLink_list, das sie als availableCustomDomains zurückgibt. Lässt du sie weg, nimmt der Link die Domain,
unter der das Formular bereits veröffentlicht ist.
Ergebnisse lesen
request_get liefert den gesamten Request. Sobald er abgeschlossen ist, enthält answers die Werte der
empfangenden Person, indiziert nach Feldschlüssel, display dieselben Schlüssel als lesbarer Text, und outcome —
Zustimmung, Ablehnung oder Änderungswunsch — ist ihr Urteil, wenn das Formular eine Entscheidungsfrage
hat. Ein callbackFailedAt-Zeitstempel bedeutet, dass die Zustellung keine Versuche mehr übrig hatte und nichts bei deinem
Endpunkt ankam; behebe das Problem beim Empfänger und rufe dann request_replayCallback auf, das die ursprüngliche Event-ID
erneut sendet, sodass dein Empfänger dedupliziert, statt erneut zu laufen. Nachdem die Aufbewahrungsrichtlinie des Formulars einen Request
entfernt hat, ist dataPurgedAt gesetzt und die Antworten sind endgültig verloren.
request_list fasst viele auf einmal zusammen, gefiltert nach status, outcome,
externalId und includeTest. Blättere mit nextCursor: eine Seite kann selten mit leeren
items und hasMore: true zurückkommen — das ist nicht das Ende der Liste, gib den Cursor zurück und mach weiter.
Ressourcen und Prompts
Jeder Skill und Tool-Katalog ist außerdem eine MCP-Ressource unter skill://<name> — skill://requests,
skill://editor-inserts. Ein Client, der resources/list unterstützt, kann sie durchsuchen und lesen, ohne
load_skill oder load_tools aufzurufen. Der Server liefert außerdem vier Prompts über prompts/list:
identity, capabilities, data_tools und editor_tools.
Tools, die erst nachfragen
Jedes Tool trägt die MCP-Hinweise readOnlyHint und destructiveHint, abgeleitet von seinem Verb. Diese Tools sind
als destruktiv markiert, weil sie sich nur mit einem weiteren Aufruf rückgängig machen lassen oder gar nicht: form_delete,
form_unpublish, workspaceFolder_delete, editor_deleteElement,
translationLanguage_delete und request_cancel. Die meisten Clients fragen die Person, bevor sie diese ausführen,
aber die Nachfrage ist die Entscheidung des Clients — prüfe also dessen Genehmigungseinstellungen, wenn du einen harten Stopp brauchst.
Einschränkungen
Keine Binär-Uploads über einen Tool-Aufruf. Bilder werden per URL gesetzt: Cover, Logos und Bild-Blöcke akzeptieren
http(s)://- oderdata:image-URIs. Ein Dokument pro Request ist die Ausnahme:document_createliefert eine Upload-URL zurück, an die ein Client mit HTTP-Zugriff die Datei perPUTsenden kann (siehe Dokumente pro Request). Um ein PDF oder einen Screenshot in ein Formular zu verwandeln, nutze den integrierten KI-Chat.Keine Workspace-KI-Skills. In formbase geschriebene Skills sind nur im integrierten KI-Chat verfügbar. Die eigenen Skills des Servers (
load_skill) sind über MCP verfügbar.
Mit einem API-Token verbinden
Die meisten Clients melden sich per OAuth an: Füge die URL ohne Header hinzu und folge Einen KI-Agenten verbinden. Ein Client, der keinen Browser öffnen kann — etwa ein Skript, ein CI-Job oder ein headless Agent — sendet stattdessen ein API-Token als Header.
Claude Code, über die Kommandozeile:
claude mcp add --transport http formbase https://api.formbase.so/api/mcp \
--header "Authorization: Bearer fb_YOUR_TOKEN"Oder in der .mcp.json eines Projekts:
{
"mcpServers": {
"formbase": {
"type": "http",
"url": "https://api.formbase.so/api/mcp",
"headers": {
"Authorization": "Bearer fb_YOUR_TOKEN"
}
}
}
}Cursor, in .cursor/mcp.json oder ~/.cursor/mcp.json:
{
"mcpServers": {
"formbase": {
"url": "https://api.formbase.so/api/mcp",
"headers": {
"Authorization": "Bearer fb_YOUR_TOKEN"
}
}
}
}Um dich statt mit einem Token per OAuth anzumelden, nutze
Zu Cursor hinzufügen
. Es fügt die Server-URL ohne Header hinzu, und Cursor fordert dich auf, dich bei formbase anzumelden.
Andere Clients nehmen dieselbe URL und denselben Header; ihre eigene Dokumentation zeigt, wo.
OAuth statt API-Tokens verwenden
Eine Drittanbieter-App, die im Auftrag einer Person eine Verbindung herstellt, sollte OAuth verwenden, statt nach einem eingefügten Token
zu fragen. formbase ist ein OAuth-2.1-Autorisierungsserver mit verpflichtendem PKCE (S256) und undurchsichtigen Token — keine JWTs, kein
Implicit Grant. Claude Desktop, Claude Code und der Claude.ai-Web-Connector entdecken das alles selbst über den MCP-Endpunkt, sodass es
reicht, nur die URL ohne Header einzufügen: Der 401 verweist auf /.well-known/oauth-protected-resource, und der Client
übernimmt von dort.
Der Ablauf, für einen Client, den du selbst schreibst:
GET /.well-known/oauth-protected-resource, dannGET /.well-known/oauth-authorization-serverfür die Endpunkt-URLs, Scopes und unterstützten Auth-Methoden.POST /oauth/registermit deinenredirect_uris(dynamische Client-Registrierung, keine Zugangsdaten nötig). Du bekommst eineclient_id, plus einclient_secret, falls du etwas anderes alstoken_endpoint_auth_method: “none”angefordert hast. Redirect-URIs müssen HTTPS sein, oder HTTP auflocalhost. Die Registrierung ist auf 20 pro Stunde pro IP begrenzt.Schicke die Person zu
/oauth/authorizemitresponse_type=code, deinerclient_id, der registriertenredirect_uri,scope=mcp:read mcp:write offline_access,stateund einemcode_challengemitcode_challenge_method=S256. Sie meldet sich an, wählt einen Arbeitsbereich und autorisiert.Tausche den Code bei
POST /oauth/tokenmitgrant_type=authorization_codeund deinemcode_verifierein, innerhalb von 60 Sekunden. Codes sind nur einmal verwendbar.Rufe den MCP-Endpunkt mit
Authorization: Bearer fbo_…auf. Zugriffstoken sind 1 Stunde gültig; Refresh-Token sind 30 Tage gültig und rotieren bei jeder Verwendung. Einen bereits verwendeten Refresh-Token erneut zu nutzen, verbrennt die gesamte Kette — speichere also immer den neuesten.
POST /oauth/revoke (RFC 7009) widerruft ein Zugriffs- oder Refresh-Token. Eine Person kann außerdem die ganze App unter
Verbundene Apps auf der Seite OAuth und API-Schlüssel trennen, was jedes Token beendet, das sie für diesen Arbeitsbereich
hält.
Falls du bereits ein Token in der Hand hast, gehört es an denselben Platz wie ein API-Schlüssel:
{
"mcpServers": {
"formbase": {
"type": "http",
"url": "https://api.formbase.so/api/mcp",
"headers": {
"Authorization": "Bearer fbo_USER_OAUTH_TOKEN"
}
}
}
}Verbundene Apps
Jede OAuth-Verbindung wird unter Verbundene Apps auf der Seite OAuth und API-Schlüssel aufgelistet, mit Angabe, wann sie verbunden und zuletzt verwendet wurde. Verbindungen sind persönlich: Nur die Person, die eine Verbindung autorisiert hat, sieht sie, und Workspace-Admins können die Verbindung eines anderen Mitglieds weder einsehen noch widerrufen. Das Trennen wirkt sofort. Eine Person, die den Arbeitsbereich verlässt oder daraus entfernt wird, verliert alle ihre Verbindungen zu ihm.