Skip to content

Database endpoints

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}

ParameterInTypeRequired
projectIdpathstringYes
envIdquerystringNo
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

ParameterInTypeRequired
projectIdpathstringYes
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}

ParameterInTypeRequired
projectIdpathstringYes
extensionIdpathstringYes
envIdquerystringNo
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}

ParameterInTypeRequired
projectIdpathstringYes
envIdquerystringNo
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

ParameterInTypeRequired
projectIdpathstringYes
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}

ParameterInTypeRequired
projectIdpathstringYes
wrapperIdpathstringYes
envIdquerystringNo
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}

ParameterInTypeRequired
projectIdpathstringYes
wrapperIdpathstringYes
envIdquerystringNo
Response 200 (application/json)
{
  ok: boolean;
}

GET /database/tiers

ParameterInTypeRequired
orgIdquerystringNo
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

ParameterInTypeRequired
projectIdpathstringYes
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

ParameterInTypeRequired
projectIdpathstringYes
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

ParameterInTypeRequired
projectIdpathstringYes
wrapperIdquerystringNo
Response 200 (application/json)
{
  tables: {
    name: string;
    description?: string;
    columns: {
      name: string;
      type: any;
    }[];
    filterable?: string[];
    requiredFilters?: string[];
  }[];
}