Saltar al contenido principal

SDKs

Vibedasher distribuye SDKs oficiales, completamente tipados, para TypeScript y Python, generados a partir de la especificación OpenAPI de la API para que se mantengan en sincronía con la plataforma. Son cómo tu propio código alcanza la plataforma mantenida: ejecutar SQL contra tus conjuntos de datos, disparar actualizaciones, gestionar conexiones y derechos de acceso, conectar un panel a datos en vivo, o automatizar desde un script cualquier cosa que hacen las herramientas MCP desde un agente.

LenguajePaqueteDocumentado aquí
TypeScript@vibedasher/client4.1.5
Pythonvibedasher4.3.19

Ambos SDKs se autentican con una clave de API en la cabecera X-Api-Key. Genera una en la aplicación bajo Ajustes → Claves de API en cloud.vibedasher.com — mira Autenticación. (Los SDKs son la vía de código; si tu agente maneja Vibedasher por MCP, inicia sesión con vibedasher login en su lugar y no necesita ninguna clave — mira Construir con tu agente.)

Ninguno de los dos clientes necesita que le digas en qué región vive tu cuenta. Sin URL base y sin region, ambos resuelven a https://api.vibedasher.com/api, que enruta cada petición por la credencial que lleva — mira Un solo host, enrutado por tu credencial. Pasar region sigue soportado y fija el cliente al nombre de host propio de esa región, https://api.{region}.vibedasher.com/api; un baseUrl / base_url explícito prevalece sobre ambos. (region pasó a ser opcional en @vibedasher/client 4.1.5 y vibedasher 4.3.19.)

¿Buscas un endpoint concreto? Explora la API Reference completa — cada operación agrupada por recurso, con ejemplos de petición en curl / Python / TypeScript generados a partir de las mismas firmas con las que se construyen los SDKs.

La forma de cada llamada​

Ambos SDKs exponen el mismo cliente fluido agrupado por recurso. Constrúyelo una vez, y luego llama a métodos agrupados por recurso. Las firmas son planas: primero los parámetros de ruta (en el orden de la ruta), luego el cuerpo de la petición, y luego un objeto de opciones final opcional que contiene los parámetros de consulta. No hay objetos envoltorio path / query / body.

Los recursos son los mismos 23 en ambos lenguajes, camelCase en TypeScript y snake_case en Python:

accounts, aiProviders, apiKeys, chats, connections, dashboardSubscriptions, datasets, dbt, embedTokens, folders, groups, images, questions, refreshes, skills, sql, subscriptions, tasks, templates, tools, upload, users, viz.

Una respuesta no-2xx lanza — VibedasherApiError en ambos lenguajes. Los métodos nunca resuelven a una unión de error, así que no compruebas un resultado antes de usarlo.

TypeScript​

npm install @vibedasher/client
import { Vibedasher, VibedasherApiError } from '@vibedasher/client';

const client = new Vibedasher({
apiKey: process.env.VIBEDASHER_API_KEY!,
});

// Listar conjuntos de datos — los parámetros de consulta van en el objeto de opciones final
const page = await client.datasets.list({ limit: 50 });

// Crear — el cuerpo es posicional
const created = await client.datasets.create({ name: 'Sales', type: 'csv' });

// Obtener uno por id — los parámetros de ruta son posicionales
const one = await client.datasets.get(created.dataset.id);

// Actualizar — parámetro de ruta, luego cuerpo
const updated = await client.datasets.update(one.dataset.id, { name: 'Sales 2026' });

Cada método está tipado de principio a fin: los tipos de los argumentos y el tipo de respuesta resuelto vienen de la especificación, y las interfaces por recurso (DatasetsResource, DatasetsListOptions, …) y los tipos de modelo (DatasetResponse, DatasetUpdate, …) se exportan desde la raíz del paquete si quieres anotar una variable.

Ejecutar SQL​

client.query es el método escrito a mano que la superficie generada no tiene: una llamada, resultados columnares tipados de vuelta.

const result = await client.query({
sql: 'SELECT country, SUM(revenue) AS revenue FROM sales GROUP BY 1',
});
console.log(result.columns, result.rows);

datasetIds es opcional — omítelo y el servidor resuelve el conjunto de datos a partir de los alias que referencia tu SQL, aplicando exactamente la misma autorización.

Subir un CSV​

const uploaded = await client.datasets.upload({
name: 'Sales',
content: 'country,revenue\nFR,10\nDE,12\n',
});
console.log(uploaded.cleanSQLName); // el alias para usar en el SQL de client.query

Escape hatch​

El cliente fetch subyacente está en la instancia como client.http si necesitas interceptores, un fetch personalizado, o anulaciones por llamada. No hay ningún singleton a nivel de módulo que configurar: cada instancia de Vibedasher posee su propio cliente, así que dos clientes en un mismo proceso nunca se pisan la URL base ni la clave.

Python​

pip install vibedasher
from vibedasher import Vibedasher, VibedasherApiError
from vibedasher.models import DatasetCreate, DatasetUpdate

client = Vibedasher(api_key="<your-api-key>")

# Listar conjuntos de datos — los parámetros de consulta son solo por palabra clave
page = client.datasets.list(limit=50)

# Crear — el cuerpo es el primer argumento posicional
created = client.datasets.create(DatasetCreate(name="Sales", type_="csv"))

# Obtener uno por id — los parámetros de ruta son posicionales
one = client.datasets.get(created.dataset.id)

# Actualizar — parámetro de ruta, luego cuerpo
updated = client.datasets.update(one.dataset.id, DatasetUpdate(name="Sales 2026"))

Los modelos de petición y respuesta viven en vibedasher.models. Los atributos de recurso son snake_case (client.datasets, client.api_keys, client.ai_providers, client.embed_tokens, client.viz, …), y también lo son los métodos.

Ejecutar SQL​

result = client.query(sql="SELECT country, SUM(revenue) AS revenue FROM sales GROUP BY 1")
print(result.columns, result.rows)

Subir un CSV​

uploaded = client.datasets.upload(name="Sales", content="country,revenue\nFR,10\nDE,12\n")
print(uploaded["cleanSQLName"]) # el alias para usar en el SQL de client.query

Escape hatch​

Los módulos de operación planos bajo vibedasher.api.<tag> se siguen distribuyendo para cualquier cosa que la fachada no cubra. Construye un cliente en bruto con create_client y llama a .sync(), .sync_detailed(), .asyncio(), o .asyncio_detailed():

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)

Manejo de errores​

Ambos SDKs lanzan en una respuesta no-2xx, así que el camino feliz se lee de corrido y los errores se capturan donde quieras manejarlos.

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)

Códigos de estado comunes: 401/403 (clave de API ausente o inválida, o una clave usada en una ruta solo de sesión), 404 (no encontrado, o una viz que no está publicada), 422 (error de validación de la petición). La página de referencia de cada endpoint lista las respuestas exactas que puede devolver.

Paginación​

Los endpoints de listado devuelven una página de resultados más un cursor nextKey. Rara vez necesitas manejar ese cursor tú mismo: cada recurso listable lleva iterAll() (TypeScript) / iter_all() (Python), que recorre las páginas y va entregando filas.

TypeScript:

for await (const ds of client.datasets.iterAll()) {
handle(ds);
}

Python:

for ds in client.datasets.iter_all():
handle(ds)

Ambos también exponen la forma a nivel de página (iterPages() / iter_pages()) para cuando quieres el sobre en lugar de las filas. Manejar el cursor a mano sigue funcionando — pásale de vuelta nextKey como exclusiveStartKey (exclusive_start_key en Python) y detente cuando vuelva null/None — pero los iteradores también detectan un cursor que deja de avanzar y lanzan un error en lugar de dar vueltas para siempre.

El nombre en el cable — el que muestran la pestaña cURL y la tabla de parámetros de cada página de referencia — es siempre exclusiveStartKey; el SDK de TypeScript conserva esa grafía camelCase como clave de opción, y el SDK de Python expone el mismo parámetro como el argumento exclusive_start_key. Es un único cursor, escrito según el lenguaje — nunca ambos en una misma petición.

Advertencia sobre el tipado de respuestas​

Algunas rutas de la API actualmente devuelven respuestas poco tipadas (object / Any) porque declaran una forma de respuesta genérica en el backend. Los cuerpos de petición, los parámetros de consulta/ruta, y un conjunto cada vez mayor de respuestas están completamente tipados. Los tipos de respuesta se están reforzando módulo a módulo — actualiza el SDK para recoger las mejoras.

nota

Los SDKs son generados, nunca editados a mano. Si encuentras una laguna, casi siempre está en origen en la especificación OpenAPI de la API — contáctanos a través de la página de contacto.