OSS-first docs
These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.
Notion integration for creating shared project summaries and task entries.
Source Definition
export const notionIntegrationSpec = defineIntegration({
meta: {
key: 'project-management.notion',
version: '1.0.0',
category: 'project-management',
title: 'Notion',
description:
'Notion integration for creating shared project summaries and task entries.',
domain: 'productivity',
owners: ['@platform.integrations'],
tags: ['project-management', 'notion'],
stability: StabilityEnum.Beta,
},
supportedModes: ['managed', 'byok'],
transports: [
{
type: 'rest',
baseUrl: 'https://api.notion.com',
apiVersionHeader: 'Notion-Version',
},
],
preferredTransport: 'rest',
supportedAuthMethods: [
{ type: 'bearer' },
{
type: 'oauth2',
grantType: 'authorization_code',
authorizationUrl: 'https://api.notion.com/v1/oauth/authorize',
tokenUrl: 'https://api.notion.com/v1/oauth/token',
scopes: [],
},
],
versionPolicy: {
currentVersion: '2022-06-28',
supportedVersions: [{ version: '2022-06-28', status: 'stable' }],
versionHeader: 'Notion-Version',
},
capabilities: {
provides: [{ key: 'project-management.work-items', version: '1.0.0' }],
},
configSchema: {
schema: {
type: 'object',
properties: {
databaseId: {
type: 'string',
description: 'Optional Notion database ID to store tasks.',
},
summaryParentPageId: {
type: 'string',
description: 'Optional parent page ID for summary pages.',
},
titleProperty: {
type: 'string',
description: 'Database title property name (defaults to "Name").',
},
statusProperty: {
type: 'string',
description: 'Database status/select property name.',
},
priorityProperty: {
type: 'string',
description: 'Database priority/select property name.',
},
tagsProperty: {
type: 'string',
description: 'Database multi-select tags property name.',
},
dueDateProperty: {
type: 'string',
description: 'Database date property name for due dates.',
},
descriptionProperty: {
type: 'string',
description: 'Database rich-text property for descriptions.',
},
},
},
example: {
databaseId: 'xxxxxxxxxxxxxxxx',
summaryParentPageId: 'yyyyyyyyyyyyyyyy',
titleProperty: 'Name',
statusProperty: 'Status',
},
},
secretSchema: {
schema: {
type: 'object',
required: ['apiKey'],
properties: {
apiKey: {
type: 'string',
description: 'Notion integration secret token.',
},
},
},
example: {
apiKey: 'secret_notion_token',
},
},
healthCheck: {
method: 'custom',
timeoutMs: 4000,
},
docsUrl: 'https://developers.notion.com',
constraints: {},
byokSetup: {
setupInstructions:
'Create a Notion internal integration, share the target database/page with it, and store the secret token.',
keyRotationSupported: false,
quotaTrackingSupported: false,
},
});