Loading AITIZER

0%

API Reference

One workspace. Every endpoint.

The complete reference for the AITIZER REST API, MCP server, realtime channel and automation engine — the same surface our own app runs on.

Introduction

The AITIZER API is organized around REST. Every table, column, record, view, agent and action in your workspace is programmable — the same surface our own app, the Vibe Builder and your AI agents use.

All requests are served over HTTPS from your workspace’s base URL and accept / return JSON.

BASE URL
https://api.aitizer.com

Three protocols are available on the same data: the REST API for classic integrations, a native MCP server (JSON-RPC 2.0) for AI agents and MCP clients like Claude, and a WebSocket realtime channel for live updates.

Authentication

Authenticate with a workspace-scoped token in the Authorization header. Tokens are created in your workspace and can also be sent as X-MCP-Token.

AUTH
curl https://api.aitizer.com/functions/v1/rest-api/tables \
  -H "Authorization: Bearer $AITIZER_TOKEN"

Token types

FieldTypeDescription
rest_apitokenFull REST API access for integrations and your own backend. Cannot call the MCP protocol.
user_mcptokenRestricted MCP token for end users and embedded agents — read/write records only; no schema or admin operations.
vibe_mcptokenSystem token used by the Vibe Builder agent. Full tool access, created automatically per workspace.

Per-table permissions

Every token carries an explicit permission grid per table — nothing is implicit:

FieldTypeDescription
can_read_allbooleanRead every record in the table.
can_createbooleanInsert new records.
can_editbooleanUpdate existing records.
can_deletebooleanDelete records.

Errors

AITIZER uses conventional HTTP status codes, and data-layer errors are returned in a predictable envelope so your client can branch on error.code.

ERROR ENVELOPE
{
  "data": null,
  "error": {
    "message": "No rows found",
    "code": "PGRST116"
  }
}

Status codes

FieldTypeDescription
400httpInvalid request — missing or malformed fields.
401httpMissing or invalid token.
403httpToken is valid but lacks permission for this table or operation.
404httpResource not found.
429httpRate limited.
500httpSomething went wrong on our side.

Credits & limits

AI work — LLM tokens, ElevenLabs voice characters, Whisper transcription and embeddings — is metered against your workspace wallet. Plain REST calls are not AI-metered.

Every call is also written to an audit log (api_usage_logs) with the endpoint, method, table, status code and token used — so you can attribute every byte of usage.

Tables

Tables are the core container. Creating one provisions a real Postgres table behind the scenes.

GET/functions/v1/rest-api/tables

List every table in the workspace your token can see.

POST/functions/v1/rest-api/tables
FieldTypeDescription
namestringREQUIRED Table display name.
iconstringLucide icon name, e.g. Users.
columnsarrayOptional initial columns: { name, type, options? }.
CREATE A TABLE
curl -X POST https://api.aitizer.com/functions/v1/rest-api/tables \
  -H "Authorization: Bearer $AITIZER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Customers",
    "icon": "Users",
    "columns": [
      { "name": "Name",  "type": "text" },
      { "name": "Email", "type": "text" },
      { "name": "Status", "type": "single_select",
        "options": [ { "id": "active", "label": "Active", "color": "green" } ] }
    ]
  }'
RESPONSE 201
{
  "id": 123,
  "name": "Customers",
  "icon": "Users",
  "pg_table_name": "data_123_456",
  "created_at": "2026-06-11T12:00:00Z"
}
DELETE/functions/v1/rest-api/tables/:id

Permanently deletes the table and all of its data.

Columns

GET/functions/v1/rest-api/tables/:id/columns
POST/functions/v1/rest-api/tables/:id/columns
FieldTypeDescription
namestringREQUIRED Column name — also usable as a {Tag} in formulas and actions.
typestringREQUIRED One of the 22 column types — see Column types.
requiredbooleanReject empty values on create.
optionsarrayFor selects: { id, label, color } items.
positionnumberOrder in the grid — also the execution order of action columns.
PATCH/functions/v1/rest-api/tables/:id/columns/:colId

Partial update — send only the fields you want to change.

DELETE/functions/v1/rest-api/tables/:id/columns/:colId

Records

GET/functions/v1/rest-api/tables/:id/records

Query parameters

FieldTypeDescription
limitnumberMax records to return.
offsetnumberPagination offset.
filter[Field]queryEquality filter by column name, e.g. filter[Status]=active.
filter[Field][op]queryOperator filter — eq, neq, contains, ncontains, gt, gte, lt, lte, empty, nempty.
POST/functions/v1/rest-api/tables/:id/records

Creating a record runs the table’s automation pipeline: formulas compute, action columns fire, embeddings update — the row executes itself.

CREATE A RECORD
curl -X POST https://api.aitizer.com/functions/v1/rest-api/tables/123/records \
  -H "Authorization: Bearer $AITIZER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "row_data": { "col_789": "ada@acme.com", "col_790": "active" } }'
RESPONSE 201
{
  "id": 999,
  "row_data": { "col_789": "ada@acme.com", "col_790": "active" },
  "created_at": "2026-06-11T12:00:00Z",
  "created_by": "user-uuid"
}
PATCH/functions/v1/rest-api/tables/:id/records/:recordId
DELETE/functions/v1/rest-api/tables/:id/records/:recordId
POST/functions/v1/rest-api/tables/:id/records/:rid/compute/:colName

Recompute a single formula / computed column for one record — useful for previews and testing.

Views

Six view types render the same rows: grid, kanban, gallery, form, calendar and timeline (Gantt).

GET/functions/v1/rest-api/tables/:id/views
POST/functions/v1/rest-api/tables/:id/views
FieldTypeDescription
namestringREQUIRED View display name.
view_typestringREQUIRED grid · kanban · gallery · form · calendar · timeline
kanban_column_idnumberFor kanban: the single-select column that defines the lanes.
filtersarraySaved filter conditions for the view.
form_configobjectFor forms: field order, sections, visibility.
DELETE/functions/v1/rest-api/tables/:id/views/:viewId

Run actions

Trigger action columns (HTTP, AI, cross-table operations) on demand for one or many records — the same engine the grid uses.

POST/functions/v1/rest-api/tables/:id/run-actions
FieldTypeDescription
record_idsnumber[]REQUIRED Records to run the pipeline on.
column_idsnumber[]Restrict to specific action columns; omit to run all.
modestringsequential (default) or parallel.
RESPONSE
{
  "results": [
    { "record_id": 999, "column_id": 456, "success": true, "result": "..." }
  ]
}

Column types

22 column types in three families. Data columns store, computed columns derive, action columns execute.

Data

textPlain or rich-text Markdown.
numberInteger or float values.
checkboxBoolean toggle.
dateISO 8601 date or datetime.
fileMulti-file attachments with thumbnails.
single_selectOne option, colored badges.
multi_selectMany options at once.
user_referenceOne or more workspace users.
relationLink rows to another table.

Computed

formulaExpression or full JavaScript, with {Column} refs.
rollupAggregate related rows: sum, avg, min, max, count, concat.
json_parserExtract a value from JSON by path, e.g. items[0].price.

Actions

http_requestCall any API — method, headers, auth, templated body.
actionRun a catalog integration (Stripe, Slack, OpenAI…).
ai_agentRun an AI agent on the row, with memory.
create_recordInsert a row into another table with field mappings.
update_recordUpdate matching rows in any table by filter.
delete_recordDelete matching rows by filter.
fetch_recordsQuery another table; result stored as JSON.
loopIterate an array — downstream columns run once per item.
delayPause the pipeline (rate-limit friendly).

Example — an AI column

COLUMN CONFIG
{
  "name": "Analyze with AI",
  "type": "ai_agent",
  "agentId": 7,
  "prompt": "Score this lead from 0-100 and explain why:\n{Feedback}",
  "executeOnCreate": true,
  "executeOnEdit": false
}

Example — a rollup

COLUMN CONFIG
{
  "name": "Total Spent",
  "type": "rollup",
  "rollupRelationColumnId": "col_orders",
  "rollupTargetColumnId": "col_amount",
  "rollupAggregator": "sum"
}

Template tags

Anywhere an action takes text — URLs, bodies, prompts, field mappings — you can reference the current row with tags. Tags resolve at execution time.

FieldTypeDescription
{Column Name}tagThe row’s value for that column.
{$item}tagInside a loop: the current array item (JSON).
{$item.field}tagA property of the current loop item.
{$index}tagThe current loop index, starting at 0.
TAGS IN AN HTTP COLUMN
POST https://api.example.com/process?id={$item.id}
Body: { "name": "{Name}", "amount": {Amount} }

Execution model

Action columns execute in position order, left to right — the grid is the pipeline.

FieldTypeDescription
executeOnCreatebooleanRun when a row is created.
executeOnEditbooleanRe-run when any cell on the row changes.
conditionsarrayGate execution: only run when all conditions match (equals, contains, gt, is_empty…).

Safety

Circular dependencies between columns are detected and blocked — a formula cannot reference itself, and loops cannot nest loops. Every execution is logged per record and column, and you can test on a sample row from the UI before going live.

Integrations

27 ready integrations ship as action catalogs — each exposes typed actions you map to your columns. The list is unlimited: any HTTP endpoint can be registered as a custom action.

AIOpenAI · Anthropic · Gemini · ElevenLabs · Tavily
PaymentsStripe · Mercado Pago · Asaas
MessagingWhatsApp Cloud · Telegram · Slack · Discord · Meta Graph
EmailResend · SendGrid · Brevo
CRM & toolsHubSpot · Notion · ClickUp · Trello · Airtable · Google Sheets · Shopify
Dev & dataGitHub · Linear · Hostinger · OpenWeather · custom HTTP

Credential modes

FieldTypeDescription
admin_credentialmodeKey stored at workspace level by an admin; editors just pick it. Secrets never touch the client.
editor_credentialmodeEntered in the column config, encrypted server-side (pgcrypto), returned only as set: true.
platform_llmmodeAITIZER injects the platform LLM key — zero setup for white-label end users.

AI Agents

An agent is a configured LLM with memory, tools, knowledge, a voice and explicit permissions over your tables.

FieldTypeDescription
namestringREQUIRED Agent display name.
system_promptstringREQUIRED The agent’s instructions. Every change is versioned with diff & restore.
llm_providerstringREQUIRED openai · anthropic · google
llm_modelstringREQUIRED e.g. gpt-4o, claude-sonnet-4, gemini-2.5-pro.
temperaturenumber0.0 — 1.0.
audio_responsebooleanReply with ElevenLabs voice audio.
voice_idstringElevenLabs voice (80+ voices in EN, PT-BR, ES, multilingual).
interpret_imagesbooleanEnable vision — the agent reads images users send.
mcp_server_idnumberWhich MCP server (and therefore which table permissions) the agent uses.

Agent channels

One agent, four channels: web iframe, web embed, WhatsApp Cloud and Telegram. All hit the same webhook.

POST/functions/v1/agent-webhook?type=web&agent_id=:id
WEB CHAT REQUEST
{
  "session_id": "web_3f1c...",
  "message": "I want a quote for 50 seats"
}
RESPONSE
{
  "reply": "Great - what company are you with?",
  "session_id": "web_3f1c...",
  "audio_response": "<base64 mp3, if voice is on>",
  "tool_calls": []
}

WhatsApp (type=whatsapp) handles Meta’s verification handshake and message payloads; Telegram (type=telegram) auto-registers its webhook and supports text, voice notes (transcribed with Whisper) and photos (vision). Sessions are persistent per user: wa_<phone>, tg_<chat>, web_<uuid>, with the last 20 messages as memory.

Intake / lead capture

Intake fields make the agent collect data before the conversation starts — and it will not move on until every required field is answered and valid.

FieldTypeDescription
labelstringREQUIRED Internal field name, e.g. "Customer Name".
prompt_questionstringREQUIRED What the agent asks, e.g. "What’s your name?".
validation_regexstringServer-side validation; invalid answers are re-asked.
requiredbooleanRe-ask while empty. Default true.
target_table_idnumberTable that receives the collected lead.
target_column_idnumberColumn the answer is written to.

When the last field is collected the lead row is created automatically — then the normal conversation begins.

Knowledge & tools

Knowledge base

Attach Markdown documents to an agent (inline or uploaded). They are injected into the system prompt as reference material, with a smart budget so context never explodes.

Custom tools

Give an agent typed tools the LLM can call — three kinds:

FieldTypeDescription
special_fieldkindBridge to a catalog integration action (e.g. "Charge customer" via Stripe).
mcpkindA curated AITIZER MCP tool: read/write records, run SQL, inspect schema.
httpkindAny endpoint: method, URL, headers, templated body, JSON-Schema input.
TOOL DEFINITION
{
  "name": "create_ticket",
  "description": "Open a support ticket for the current customer",
  "kind": "http",
  "http_config": {
    "method": "POST",
    "url": "https://api.example.com/tickets",
    "body": "{ \"subject\": \"{subject}\", \"priority\": \"{priority}\" }"
  },
  "input_schema_json": {
    "type": "object",
    "properties": {
      "subject":  { "type": "string" },
      "priority": { "type": "string", "enum": ["low", "high"] }
    },
    "required": ["subject"]
  }
}

Voice

Agents speak with ElevenLabs (eleven_multilingual_v2) and listen with Whisper. Voice replies return as MP3 alongside the text; voice notes on Telegram are transcribed automatically.

POST/functions/v1/agent-tts-preview
FieldTypeDescription
voiceIdstringREQUIRED ElevenLabs voice ID.
textstringREQUIRED Text to synthesize.
workspaceIdnumberREQUIRED Workspace whose key and wallet are used.

Returns binary audio/mpeg. Characters are metered against the workspace wallet.

Vectorization

Enable the vectorizer on any table and every record is embedded automatically — on create, on update, removed on delete. No external vector DB to run: embeddings live in Postgres (pgvector, 1536 dims).

POST/functions/v1/vectorize
FieldTypeDescription
actionstringREQUIRED sync_table · vectorize_record · search · delete_embedding
table_idnumberREQUIRED Which table.
record_idnumberFor single-record actions.
querystringFor search: the natural-language query.
limitnumberTop-K results for search (default 10).

Models: text-embedding-3-small (default), text-embedding-3-large, ada-002 — selectable per table.

Realtime

Subscribe to row-level changes over WebSocket — a LISTEN/NOTIFY bridge straight from Postgres.

WSwss://api.aitizer.com/realtime
SUBSCRIBE
{
  "type": "subscribe",
  "subId": "sub-1",
  "table": "app_tables",
  "event": "*",
  "filter": "workspace_id=eq.456"
}
CHANGE EVENT
{
  "type": "change",
  "subId": "sub-1",
  "payload": {
    "eventType": "INSERT",
    "new": { "id": 123, "name": "New Table" },
    "old": null
  }
}

Storage

Workspace file storage with public and authenticated buckets (branding-assets, agent-avatars, attachments…).

POST/storage/v1/object/:bucket/:path

Upload binary or multipart. Returns the storage key and a public URL.

GET/storage/v1/object/public/:bucket/:path
GET/storage/v1/object/authenticated/:bucket/:path
POST/storage/v1/object/list/:bucket
DELETE/storage/v1/object/:bucket/:path

MCP server

AITIZER ships a native MCP server — the open protocol that lets AI agents (ours, yours, or Claude itself) act on your workspace with real, scoped permissions.

POST/functions/v1/mcp-server

JSON-RPC 2.0. Authenticate with Authorization: Bearer or X-MCP-Token.

TOOLS/CALL
{
  "jsonrpc": "2.0",
  "id": "1",
  "method": "tools/call",
  "params": {
    "name": "create_record",
    "arguments": {
      "table_id": 123,
      "fields": { "Name": "Ada Lovelace", "Status": "Active" }
    }
  }
}

Writes respect field-level AI control: columns flagged ai_populates: false are silently stripped — the model can never touch fields you own.

MCP tools

19 tools, named exactly as the server exposes them:

check_column_typesLive catalog of types, integrations and agents — call this first.
list_tablesTables with this token’s permission per table.
create_tableCreate a table (with optional columns).
delete_tableDrop a table and its data.
list_columnsColumns with ai_purpose hints.
create_columnAdd a column of any type.
update_columnChange a column’s config.
delete_columnRemove a column.
list_recordsRows with filters and paging.
get_recordOne row by id.
create_recordInsert — respects ai_populates.
update_recordUpdate — respects ai_populates.
delete_recordDelete a row.
compute_cellRe-run a computed column on one row.
list_viewsViews for a table.
create_viewCreate grid/kanban/gallery/form views.
list_special_field_groupsInstalled integrations.
list_special_field_requestsActions inside an integration.
sql_querySELECT with human-readable table and column names.

user_mcp tokens see only the safe data subset (reads, record writes, sql_query, compute_cell); schema and admin tools require a full token.

Permissions

Roles

FieldTypeDescription
super_adminroleEverything — members, billing, branding, integrations.
adminroleWorkspace management except super-admin accounts.
editorroleFull data and schema work; no members or billing.
viewerroleRead-only across tables and views.

Row-level security

Every query runs through Postgres RLS policies (is_workspace_member, has_role) — isolation is enforced by the database, not by application code.

Field-level AI control

FieldTypeDescription
ai_populatesbooleanWhen false, AI writes to this column are silently dropped. The system or humans own it.
ai_purposestringA hint the model reads, e.g. "customer’s email, used for invoices".

White-label

Each workspace carries its own brand — your clients (and their clients) see your product.

FieldTypeDescription
app_namestringProduct name shown across the app and login.
app_subtitlestringTagline.
logo_light_url / logo_dark_urlstringBrand logos per theme.
icon_light_url / icon_dark_urlstringApp icons per theme.
favicon_urlstringBrowser tab icon.
primary_color / secondary_colorstringHSL theme colors applied app-wide.
subdomainstringyour-brand.aitizer.app — branding resolves before login.
custom_domainstringBring your own domain.
public_registrationbooleanLet end users sign up without an invite.

Combine with scoped rest_api / user_mcp tokens per client and per-table permission grids, and every client of yours gets an isolated, branded, API-ready workspace.

Start free