SDKs
Vibedasher liefert offizielle, vollständig typisierte SDKs für TypeScript und Python, generiert aus der OpenAPI-Spezifikation der API, damit sie im Gleichschritt mit der Plattform bleiben. So erreicht Ihr eigener Code die betriebene Plattform: SQL gegen Ihre Datensätze ausführen, Aktualisierungen auslösen, Verbindungen und Zugriffsrechte verwalten, ein Dashboard an lebende Daten anbinden oder alles automatisieren, was die MCP-Werkzeuge aus einem Skript statt aus einem Agenten heraus tun.
| Sprache | Paket | Hier dokumentiert |
|---|---|---|
| TypeScript | @vibedasher/client | 4.1.5 |
| Python | vibedasher | 4.3.19 |
Beide SDKs authentifizieren sich mit einem API-Schlüssel im X-Api-Key-Header.
Erzeugen Sie einen in der App unter Einstellungen → API-Schlüssel auf
cloud.vibedasher.com — siehe
Authentifizierung. (Die SDKs sind der Code-Pfad; wenn Ihr Agent
Vibedasher über MCP steuert, meldet er sich stattdessen mit vibedasher login an und
braucht überhaupt keinen Schlüssel — siehe
Mit Ihrem Agenten bauen.)
Keinem der beiden Clients muss mitgeteilt werden, in welcher Region Ihr Konto liegt. Ohne
Basis-URL und ohne region lösen beide https://api.vibedasher.com/api auf, das jede Anfrage
anhand des mitgeführten Zugangsschlüssels routet — siehe
Ein Host, geroutet über Ihren Zugangsschlüssel.
region zu übergeben wird weiterhin unterstützt und bindet den Client an den eigenen
Hostnamen dieser Region, https://api.{region}.vibedasher.com/api; ein explizites baseUrl /
base_url hat Vorrang vor beidem. (region wurde in @vibedasher/client 4.1.5 und
vibedasher 4.3.19 optional.)
Suchen Sie einen bestimmten Endpunkt? Durchsuchen Sie die vollständige API Reference — jede Operation gruppiert nach Ressource, mit curl-/Python-/TypeScript-Anfragebeispielen, generiert aus denselben Signaturen, auf denen die SDKs aufbauen.
Die Form jedes Aufrufs
Beide SDKs stellen denselben nach Ressourcen gruppierten Fluent-Client bereit. Ihn
einmal konstruieren, dann Methoden gruppiert nach Ressource aufrufen. Die Signaturen sind
flach: zuerst die Pfadparameter (in Pfadreihenfolge), dann der Anfragekörper, dann ein
optionales abschließendes Optionsobjekt mit den Abfrageparametern. Es gibt keine
path-/query-/body-Wrapper-Objekte.
Die Ressourcen sind dieselben 23 in beiden Sprachen, camelCase in TypeScript und snake_case in Python:
accounts, aiProviders, apiKeys, chats, connections, dashboardSubscriptions,
datasets, dbt, embedTokens, folders, groups, images, questions, refreshes,
skills, sql, subscriptions, tasks, templates, tools, upload, users, viz.
Eine Nicht-2xx-Antwort wirft — VibedasherApiError in beiden Sprachen. Methoden lösen
sich nie zu einer Fehler-Union auf, sodass Sie ein Ergebnis nicht vor der Verwendung
prüfen müssen.
TypeScript
npm install @vibedasher/client
import { Vibedasher, VibedasherApiError } from '@vibedasher/client';
const client = new Vibedasher({
apiKey: process.env.VIBEDASHER_API_KEY!,
});
// Datensätze auflisten — Abfrageparameter kommen in das abschließende Optionsobjekt
const page = await client.datasets.list({ limit: 50 });
// Erstellen — der Körper ist positional
const created = await client.datasets.create({ name: 'Sales', type: 'csv' });
// Eines per ID abrufen — Pfadparameter sind positional
const one = await client.datasets.get(created.dataset.id);
// Aktualisieren — Pfadparameter, dann Körper
const updated = await client.datasets.update(one.dataset.id, { name: 'Sales 2026' });
Jede Methode ist durchgehend typisiert: Die Argumenttypen und der aufgelöste
Antworttyp stammen aus der Spezifikation, und die ressourcenweisen Schnittstellen
(DatasetsResource, DatasetsListOptions, …) sowie die Modelltypen
(DatasetResponse, DatasetUpdate, …) werden aus der Paketwurzel exportiert, falls Sie
eine Variable annotieren möchten.
SQL ausführen
client.query ist die handgeschriebene Methode, die die generierte Oberfläche nicht hat:
ein Aufruf hinein, typisierte spaltenweise Ergebnisse heraus.
const result = await client.query({
sql: 'SELECT country, SUM(revenue) AS revenue FROM sales GROUP BY 1',
});
console.log(result.columns, result.rows);
datasetIds ist optional — lassen Sie es weg, und der Server löst die Datensatzmenge aus
den Aliasnamen auf, die Ihr SQL referenziert, und wendet genau dieselbe Autorisierung an.
Eine CSV hochladen
const uploaded = await client.datasets.upload({
name: 'Sales',
content: 'country,revenue\nFR,10\nDE,12\n',
});
console.log(uploaded.cleanSQLName); // der Alias für client.query-SQL
Notausgang
Der zugrunde liegende fetch-Client liegt auf der Instanz als client.http, falls Sie
Interceptors, ein eigenes fetch oder Überschreibungen pro Aufruf benötigen. Es gibt
kein Singleton auf Modulebene, das konfiguriert werden müsste: Jede Vibedasher-Instanz
besitzt ihren eigenen Client, sodass zwei Clients in einem Prozess sich niemals
gegenseitig die Basis-URL oder den Schlüssel überschreiben.
Python
pip install vibedasher
from vibedasher import Vibedasher, VibedasherApiError
from vibedasher.models import DatasetCreate, DatasetUpdate
client = Vibedasher(api_key="<your-api-key>")
# Datensätze auflisten — Abfrageparameter sind keyword-only
page = client.datasets.list(limit=50)
# Erstellen — der Körper ist das erste positionale Argument
created = client.datasets.create(DatasetCreate(name="Sales", type_="csv"))
# Eines per ID abrufen — Pfadparameter sind positional
one = client.datasets.get(created.dataset.id)
# Aktualisieren — Pfadparameter, dann Körper
updated = client.datasets.update(one.dataset.id, DatasetUpdate(name="Sales 2026"))
Anfrage- und Antwortmodelle liegen in vibedasher.models. Ressourcenattribute sind
snake_case (client.datasets, client.api_keys, client.ai_providers,
client.embed_tokens, client.viz, …), und ebenso die
Methoden.
SQL ausführen
result = client.query(sql="SELECT country, SUM(revenue) AS revenue FROM sales GROUP BY 1")
print(result.columns, result.rows)
Eine CSV hochladen
uploaded = client.datasets.upload(name="Sales", content="country,revenue\nFR,10\nDE,12\n")
print(uploaded["cleanSQLName"]) # der Alias für client.query-SQL
Notausgang
Die flachen Operationsmodule unter vibedasher.api.<tag> werden weiterhin für alles
ausgeliefert, was die Fassade nicht abdeckt. Bauen Sie einen rohen Client mit
create_client und rufen Sie .sync(), .sync_detailed(), .asyncio() oder
.asyncio_detailed() auf:
from vibedasher import create_client
from vibedasher.api.datasets import read_datasets
raw = create_client(api_key="<your-api-key>")
datasets = read_datasets.sync(client=raw)
Fehlerbehandlung
Beide SDKs werfen bei einer Nicht-2xx-Antwort, sodass sich der Glückspfad geradlinig liest und Fehler dort abgefangen werden, wo Sie sie behandeln möchten.
TypeScript:
import { Vibedasher, VibedasherApiError } from '@vibedasher/client';
try {
const page = await client.datasets.list({ limit: 50 });
console.log(page.datasets);
} catch (err) {
if (err instanceof VibedasherApiError) {
console.error(`Request failed (${err.status})`, err.detail, err.requestId);
} else {
throw err;
}
}
Python:
from vibedasher import VibedasherApiError
try:
page = client.datasets.list(limit=50)
except VibedasherApiError as err:
print(f"Request failed ({err.status_code})", err.detail, err.request_id)
Häufige Statuscodes: 401/403 (fehlender oder ungültiger API-Schlüssel, oder ein Schlüssel, der auf einer nur per Sitzung erreichbaren Route verwendet wird), 404 (nicht gefunden, oder eine Visualisierung, die nicht veröffentlicht ist), 422 (Validierungsfehler der Anfrage). Die Referenzseite jedes Endpunkts listet die genauen Antworten auf, die er liefern kann.
Paginierung
Listen-Endpunkte liefern eine Ergebnisseite plus einen nextKey-Cursor zurück. Sie
müssen diesen Cursor selten selbst steuern: Jede auflistbare Ressource trägt
iterAll() (TypeScript) / iter_all() (Python), das die Seiten durchläuft und Zeilen
liefert.
TypeScript:
for await (const ds of client.datasets.iterAll()) {
handle(ds);
}
Python:
for ds in client.datasets.iter_all():
handle(ds)
Beide stellen außerdem die Form auf Seitenebene bereit (iterPages() / iter_pages()),
wenn Sie die Hülle statt der Zeilen möchten. Das Steuern des Cursors von Hand
funktioniert weiterhin — geben Sie nextKey als exclusiveStartKey
(exclusive_start_key in Python) zurück und stoppen Sie, wenn es null/None
zurückkommt — aber die Iteratoren erkennen zudem einen Cursor, der nicht mehr
weiterkommt, und werfen einen Fehler, statt endlos zu schleifen.
Der Name auf der Leitung — den der cURL-Tab und die Parametertabelle jeder Referenzseite
zeigen — lautet immer exclusiveStartKey; das TypeScript-SDK behält diese
camelCase-Schreibweise als Optionsschlüssel, und das Python-SDK stellt denselben Parameter
als Schlüsselwort exclusive_start_key bereit. Es ist ein einziger Cursor, je nach
Sprache geschrieben — nie beide in einer Anfrage.
Vorbehalt zur Antworttypisierung
Manche API-Routen liefern derzeit lose typisierte Antworten (object / Any), weil sie
auf dem Backend eine generische Antwortform deklarieren. Anfragekörper,
Abfrage-/Pfadparameter und eine wachsende Zahl von Antworten sind vollständig typisiert.
Antworttypen werden Modul für Modul gehärtet — aktualisieren Sie das SDK, um
Verbesserungen zu übernehmen.
Die SDKs werden generiert, niemals von Hand bearbeitet. Wenn Sie eine Lücke entdecken, liegt sie fast immer vorgelagert in der OpenAPI-Spezifikation der API — melden Sie sich über die Kontaktseite.