NOTION_CREATE_DATABASE - Criar Database no Notion
O que é este Node?
O NOTION_CREATE_DATABASE é o node responsável por criar novos databases no Notion programaticamente, definindo estrutura de colunas (properties) e configurações iniciais.
Por que este Node existe?
Criar databases dinamicamente permite arquiteturas flexíveis. O NOTION_CREATE_DATABASE existe para:
- Automação completa: Criar estruturas de dados sob demanda
- Multi-tenancy: Criar databases separados por cliente/projeto
- Templates dinâmicos: Replicar estruturas de dados programaticamente
- Workspace setup: Configurar workspaces automaticamente
Como funciona internamente?
Quando o NOTION_CREATE_DATABASE é executado, o sistema:
- Autentica na Notion API: Usa o apiKey fornecido
- Define parent: Página onde o database será criado
- Monta properties: Define estrutura de colunas (tipos e nomes)
- Envia POST: Faz requisição para
https://api.notion.com/v1/databases - Se erro: Retorna exceção
- Se sucesso: Retorna databaseId e url
Código interno (baseado na Notion API v1):
case 'createDatabase':
const createDatabaseResponse = await firstValueFrom(
this.httpService.post(`${notionApiUrl}/databases`,
{
parent: { type: 'page_id', page_id: data.pageId },
title: [
{
type: 'text',
text: {
content: data.title,
},
},
],
properties: data.properties,
},
{ headers }
)
);
return {
success: true,
databaseId: createDatabaseResponse.data.id,
url: createDatabaseResponse.data.url,
};
Quando você DEVE usar este Node?
Use NOTION_CREATE_DATABASE sempre que precisar de criar databases programaticamente:
Casos de uso
- Setup de projetos: "Criar database de tarefas para novo projeto"
- CRM por cliente: "Criar database de contatos para cliente X"
- Templates automáticos: "Replicar estrutura de database"
- Multi-workspace: "Criar databases separados por departamento"
Quando NÃO usar NOTION_CREATE_DATABASE
- Database já existe: Use NOTION_QUERY ou NOTION_SEARCH ao invés
- Adicionar dados: Use NOTION_CREATE_PAGE ao invés
- Modificar estrutura existente: Use API de update database ao invés
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "createDatabase" |
| apiKey | string | Sim | Token de integração do Notion |
| pageId | string | Sim | ID da página onde criar database |
| title | string | Sim | Nome do database |
| properties | object | Sim | Definição de colunas (properties) |
Estrutura de Properties
Title (obrigatório, apenas 1):
{
"Nome": {
"title": {}
}
}
Rich Text:
{
"Descrição": {
"rich_text": {}
}
}
Number:
{
"Valor": {
"number": {
"format": "number"
}
}
}
Select:
{
"Status": {
"select": {
"options": [
{ "name": "A Fazer", "color": "red" },
{ "name": "Em Progresso", "color": "yellow" },
{ "name": "Concluído", "color": "green" }
]
}
}
}
Multi-select:
{
"Tags": {
"multi_select": {
"options": [
{ "name": "Urgente", "color": "red" },
{ "name": "Bug", "color": "orange" }
]
}
}
}
Date:
{
"Prazo": {
"date": {}
}
}
Checkbox:
{
"Concluída": {
"checkbox": {}
}
}
URL:
{
"Link": {
"url": {}
}
}
Email:
{
"Email": {
"email": {}
}
}
Phone:
{
"Telefone": {
"phone_number": {}
}
}
Exemplo: Criar Database de Tarefas
{
"name": "Criar Database de Tarefas",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Nome do Projeto",
"parameters": {
"message": "Nome do projeto:",
"variable": "projeto"
}
}
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Criar Database",
"parameters": {
"operation": "createDatabase",
"apiKey": "secret_SEU_TOKEN",
"pageId": "PAGE_ID_PARENT",
"title": "Tarefas - {{projeto}}",
"properties": {
"Tarefa": {
"title": {}
},
"Status": {
"select": {
"options": [
{ "name": "A Fazer", "color": "red" },
{ "name": "Em Progresso", "color": "yellow" },
{ "name": "Concluído", "color": "green" }
]
}
},
"Prioridade": {
"select": {
"options": [
{ "name": "Alta", "color": "red" },
{ "name": "Média", "color": "yellow" },
{ "name": "Baixa", "color": "gray" }
]
}
},
"Prazo": {
"date": {}
},
"Responsável": {
"rich_text": {}
},
"Concluída": {
"checkbox": {}
}
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "✅ Database 'Tarefas - {{projeto}}' criado!\n\nURL: {{notion_1.url}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Resposta do Node
{
"success": true,
"databaseId": "a8aec43c-6f00-4f57-89c9-e2e4aa3e8d9f",
"url": "https://www.notion.so/workspace/Database-Name-a8aec43c6f004f5789c9e2e4aa3e8d9f"
}
Boas Práticas
SIM: - Defina sempre uma property do tipo "title" - Configure options para select/multi-select no momento da criação - Salve o databaseId retornado para usar depois - Use cores nas options para melhor visualização
NÃO: - Não crie databases sem parent (pageId) - Não esqueça a property title (obrigatória) - Não crie databases duplicados (verifique antes com SEARCH)
Dicas
Parent obrigatório: Todo database precisa estar dentro de uma página Title property: Apenas uma property pode ser do tipo "title" Database ID: Salve o ID retornado para criar páginas depois Options: Configure select/multi-select options na criação Colors: Use cores para categorias visuais (red, yellow, green, etc.)
Próximo Node
→ NOTION_CREATE_PAGE - Criar páginas no database → NOTION_QUERY_DATABASE - Buscar no database criado → NOTION_UPDATE_BLOCK - Modificar blocks