13 endpoints at https://api.vaif.studio, generated from the API's OpenAPI document. The REST API page covers authentication, and All endpoints lists every group.
GET /database/extensions/available
Response 200 (application/json)
{
extensions: {
name: string;
displayName: string;
description: string;
category: string;
docUrl: string;
sqlName?: string;
dedicatedOnly?: boolean;
id: string;
cloudSqlCompatible: boolean;
}[];
}
GET /database/extensions/project/{projectId}
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
envId | query | string | No |
Response 200 (application/json)
{
extensions: {
displayName: string;
description: string;
category: string;
docUrl: string;
id: string;
projectId: string;
envId: null | string;
extensionId: string;
extensionName: string;
extensionVersion: null | string;
status: string;
config: any;
installedBy: null | string;
installedAt: null | string (date-time);
lastError: null | string;
createdAt: string (date-time);
updatedAt: string (date-time);
}[];
}
POST /database/extensions/project/{projectId}/install
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
Request body (application/json, required)
{
extensionId: string;
envId?: string (uuid);
config?: { [key: string]: any };
}
Response 200 (application/json)
{
ok: boolean;
extension: {
status: string;
installedAt: string (date-time);
config: any;
createdAt: string (date-time);
envId: null | string;
extensionId: string;
extensionName: string;
extensionVersion: null | string;
id: string;
installedBy: null | string;
lastError: null | string;
projectId: string;
updatedAt: string (date-time);
};
}
Errors: 400, 401, 403, 404, 500, with the error body.
DELETE /database/extensions/project/{projectId}/{extensionId}
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
extensionId | path | string | Yes |
envId | query | string | No |
Response 200 (application/json)
{
ok: boolean;
}
GET /database/wrappers/available
Response 200 (application/json)
{
wrappers: {
id: string;
displayName: string;
description: string;
category: "auth" | "backend" | "crm" | "database" | "monitoring" | "payments" | "productivity" | "storage" | "warehouse";
status: "available" | "coming_soon";
docsPath: "/" | "/api-reference/" | "/api-reference/console-api-for-agents/" | "/api-reference/endpoints/" | "/api-reference/error-codes/" | "/api-reference/rest-api/" | "/api-reference/url-canonicalization/" | "/authentication/" | "/authentication/api-key-types/" | "/authentication/api-keys/" | "/authentication/auth-overview/" | "/authentication/oauth-providers/" | "/authentication/session-management/" | "/billing/" | "/billing/plan-and-payments/" | "/billing/project-deactivation/" | "/billing/verament-credits/" | "/changelog/" | "/cli/" | "/console/" | "/console/access-tokens/" | "/console/command-center/" | "/console/saml/" | "/console/scim/" | "/console/sign-up/" | "/console/sso/" | "/database/" | "/database/extensions/" | "/database/migrations/" | "/database/querying-data/" | "/database/row-level-security/" | "/database/schema-management/" | "/database/transactions/" | "/functions/" | "/functions/creating-functions/" | "/functions/environment-variables/" | "/functions/functions-overview/" | "/functions/monitoring-logging/" | "/functions/secrets-management/" | "/getting-started/" | "/getting-started/ai-app-builders/" | "/getting-started/connecting-your-app/" | "/getting-started/installation/" | "/getting-started/introduction/" | "/getting-started/migrate-from-firebase/" | "/getting-started/migrate-from-supabase/" | "/getting-started/project-structure/" | "/getting-started/quickstart/" | "/getting-started/testing/" | "/getting-started/troubleshooting/" | "/hosting/" | "/hosting/custom-domains/" | "/hosting/deploys-and-rollbacks/" | "/hosting/dns-providers/" | "/hosting/host-a-website/" | "/hosting/hosting-overview/" | "/hosting/move-from-heroku/" | "/hosting/move-from-netlify/" | "/hosting/move-from-render/" | "/hosting/move-from-vercel/" | "/infrastructure/" | "/infrastructure/database-gateway/" | "/infrastructure/dedicated-databases/" | "/infrastructure/deployment-checklist/" | "/infrastructure/encryption-keys/" | "/infrastructure/private-network/" | "/infrastructure/regions/" | "/integrations/" | "/integrations/claude-code/" | "/integrations/connector-airtable/" | "/integrations/connector-bigquery/" | "/integrations/connector-clickhouse/" | "/integrations/connector-cognito/" | "/integrations/connector-firebase/" | "/integrations/connector-google-sheets/" | "/integrations/connector-hubspot/" | "/integrations/connector-logflare/" | "/integrations/connector-mongodb/" | "/integrations/connector-mysql/" | "/integrations/connector-notion/" | "/integrations/connector-postgresql/" | "/integrations/connector-s3/" | "/integrations/connector-snowflake/" | "/integrations/connector-stripe/" | "/integrations/connectors/" | "/integrations/mcp-claude-desktop/" | "/integrations/mcp-codex/" | "/integrations/mcp-cursor/" | "/integrations/mcp-server/" | "/integrations/mcp-vscode/" | "/integrations/mcp-windsurf/" | "/plans/" | "/realtime/" | "/realtime/channels-and-presence/" | "/realtime/realtime-overview/" | "/sdks/" | "/sdks/dart-sdk/" | "/sdks/expo-sdk/" | "/sdks/go-sdk/" | "/sdks/javascript-sdk/" | "/sdks/migration-from-vaiftech-client/" | "/sdks/python-sdk/" | "/sdks/react-sdk/" | "/sdks/realtime-quickstart/" | "/sdks/storage-quickstart/" | "/sdks/swift-sdk/" | "/storage/" | "/storage/buckets-and-policies/" | "/storage/storage-overview/" | "/templates/" | "/templates/ecommerce-api/" | "/templates/expo-mobile-app/" | "/templates/flutter-app/" | "/templates/go-backend-api/" | "/templates/ios-swift-app/" | "/templates/nextjs-fullstack/" | "/templates/python-fastapi-backend/" | "/templates/react-spa/" | "/templates/realtime-chat/" | "/templates/saas-starter/" | "/templates/todo-app/" | "/verament/" | "/verament/generation-types/" | "/verament/prompts/" | "/verament/tiers-and-effort/";
configFields: {
key: string;
label: string;
type: any;
required: boolean;
secret?: any;
placeholder?: any;
help?: any;
options?: any;
defaultValue?: any;
}[];
docsUrl: string;
tables: {
name: string;
description?: any;
columns: any[];
filterable?: any;
requiredFilters?: any;
}[];
name: string;
docUrl: string;
cloudSqlCompatible: boolean;
}[];
}
GET /database/wrappers/project/{projectId}
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
envId | query | string | No |
Response 200 (application/json)
{
wrappers: {
id: string;
wrapperId: string;
wrapperName: string;
status: string;
availableTables: any;
enabledTables: any;
installedAt: null | string (date-time);
lastSyncAt: null | string (date-time);
lastError: null | string;
displayName: string;
description: string;
category: string;
docUrl?: string;
supported: boolean;
publicConfig: {
[key: string]: string;
};
configuredFields: string[];
}[];
}
POST /database/wrappers/project/{projectId}/install
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
Request body (application/json, required)
{
wrapperId: string;
envId?: string (uuid);
config: { [key: string]: any };
enabledTables?: string[];
}
Response 200 (application/json)
{
ok: boolean;
wrapper: {
id: string;
wrapperId: string;
wrapperName: string;
status: string;
lastError?: null | string;
availableTables: any;
enabledTables: any;
installedAt: string (date-time);
};
test: {
ok: boolean;
message?: string;
latencyMs?: number;
};
}
Errors: 400, 401, 403, 404, 500, with the error body.
PATCH /database/wrappers/project/{projectId}/{wrapperId}
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
wrapperId | path | string | Yes |
envId | query | string | No |
Request body (application/json, required)
{
config?: { [key: string]: any };
enabledTables?: string[];
}
Response 200 (application/json)
{
ok: boolean;
status: { [key: string]: any };
test?: {
ok: boolean;
message?: string;
latencyMs?: number;
};
}
Errors: 400, 401, 403, 404, 500, with the error body.
DELETE /database/wrappers/project/{projectId}/{wrapperId}
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
wrapperId | path | string | Yes |
envId | query | string | No |
Response 200 (application/json)
{
ok: boolean;
}
GET /database/tiers
| Parameter | In | Type | Required |
|---|
orgId | query | string | No |
Response 200 (application/json)
{
tiers: {
tier: "2xl" | "3xl" | "4xl" | "custom" | "high-memory-large" | "high-memory-medium" | "high-memory-xl" | "large" | "medium" | "micro" | "small" | "xl";
displayName: string;
vcpus: number | "shared";
ramGb: number;
storageGb: number;
maxConnections: number;
gcpInstanceType: string;
estimatedMonthlyCostCents: number;
description: string;
haAvailable: boolean;
haMonthlyCostMultiplier: number;
category: "enterprise" | "high-memory" | "standard";
}[];
regions: {
key: string;
gcpRegion: string;
label: string;
city: string;
country: string;
countryCode: string;
continent: string;
flag: string;
enabled: boolean;
}[];
configStatus: string;
planLimits: null | {
enabled: boolean;
tiers: ("2xl" | "3xl" | "4xl" | "custom" | "high-memory-large" | "high-memory-medium" | "high-memory-xl" | "large" | "medium" | "micro" | "small" | "xl")[];
customSizing: boolean;
maxStorageGb: number;
};
availableTiers: {
tier: "2xl" | "3xl" | "4xl" | "custom" | "high-memory-large" | "high-memory-medium" | "high-memory-xl" | "large" | "medium" | "micro" | "small" | "xl";
displayName: string;
vcpus: number | "shared";
ramGb: number;
storageGb: number;
maxConnections: number;
gcpInstanceType: string;
estimatedMonthlyCostCents: number;
description: string;
haAvailable: boolean;
haMonthlyCostMultiplier: number;
category: "enterprise" | "high-memory" | "standard";
}[];
}
POST /database/connector/{projectId}/query
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
Request body (application/json, required)
{
wrapperId: string;
table: string;
envId?: string (uuid);
filters?: { [key: string]: any };
limit?: number;
offset?: number;
}
Response 200 (application/json)
{
columns: string[];
rows: { [key: string]: any }[];
total?: number;
hasMore?: boolean;
nextCursor?: string;
}
Errors: 400, 401, 403, 404, 500, with the error body.
POST /database/connector/{projectId}/test
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
Request body (application/json, required)
{
wrapperId: string;
envId?: string (uuid);
}
Response 200 (application/json)
{
ok: boolean;
message?: string;
latencyMs?: number;
}
GET /database/connector/{projectId}/tables
| Parameter | In | Type | Required |
|---|
projectId | path | string | Yes |
wrapperId | query | string | No |
Response 200 (application/json)
{
tables: {
name: string;
description?: string;
columns: {
name: string;
type: any;
}[];
filterable?: string[];
requiredFilters?: string[];
}[];
}