IntegrateIntegrate
Database

Schema

Canonical provider_token and trigger table definitions

Database adapters expect tables (or collections) with these fields. Column names use snake_case in SQL; Drizzle/Prisma models typically map to camelCase.

provider_token

Stores OAuth access and refresh tokens per user, provider, and account.

ColumnTypeNotes
idtextPrimary key
user_idtextOwner user
providertexte.g. github, gmail
account_emailtext, nullableIdentifies account for multi-account providers
account_idtext, nullableProvider-specific account id
access_tokentextRequired
refresh_tokentext, nullable
token_typetextDefault Bearer
expires_attimestamp, nullable
scopetext, nullableSpace-separated scopes
created_attimestamp
updated_attimestamp

Indexes

CREATE INDEX provider_token_user_id_idx ON provider_token(user_id);
CREATE INDEX provider_token_provider_idx ON provider_token(provider);
CREATE INDEX provider_token_user_provider_idx ON provider_token(user_id, provider);
CREATE UNIQUE INDEX provider_token_user_provider_account_email_uidx
  ON provider_token(user_id, provider, account_email);

The unique index on (user_id, provider, account_email) supports multiple accounts per provider. Legacy rows with null account_email may coexist until migrated.

Reference Drizzle schema

Import from the SDK:

import { integrateProviderToken } from "integrate-sdk/server";

Or copy from integrate-sdk source: src/database/schemas/drizzle.ts.

trigger

Stores scheduled tool executions.

ColumnTypeNotes
idtextPrimary key
user_idtext, nullableOwner; may be repaired via hooks
nametext, nullable
descriptiontext, nullable
tool_nametextMCP tool to execute
tool_argumentsjson/jsonbTool arguments
schedule_typetextonce or cron
schedule_valuetextISO timestamp (once) or cron expression
statustextactive, paused, completed, failed
providertext, nullableOAuth provider for the tool
last_run_attimestamp, nullable
next_run_attimestamp, nullable
run_countintegerDefault 0
last_errortext, nullable
last_resultjson/jsonb, nullable
created_attimestamp
updated_attimestamp

Indexes

CREATE INDEX trigger_user_id_idx ON trigger(user_id);
CREATE INDEX trigger_status_idx ON trigger(status);
CREATE INDEX trigger_next_run_at_idx ON trigger(next_run_at);

ProviderTokenData mapping

When the SDK reads tokens, it returns:

interface ProviderTokenData {
  accessToken: string;
  refreshToken?: string;
  tokenType: string;
  expiresIn: number;
  expiresAt?: string;
  scopes?: string[];
  email?: string;
  accountId?: string;
}

The adapter selects the best row when multiple accounts exist (email/accountId hints from context or OAuth flow).

Raw callbacks

If you do not use an adapter, implement getProviderToken, setProviderToken, and removeProviderToken manually. See the legacy guide content in the Database overview and Triggers pages.

On this page