Zum Hauptinhalt springen

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.

SprachePaketHier dokumentiert
TypeScript@vibedasher/client4.1.5
Pythonvibedasher4.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.

hinweis

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.