Pandai API

Go to App

API Documentation

Use the Pandai API to integrate with external services, AI agents, and automation tools. Authenticate using API keys for secure, scoped access.

Quick Start

1. Create API Key

Generate an API key from your account settings or via the API.

2. Authenticate

Include your API key in the X-API-Key header with each request.

3. Make Requests

Access workspaces, boards, items, and more via REST endpoints.

Authentication

All API requests require authentication using an API key. Include your key in one of these ways:

Option 1: X-API-Key Header (Recommended)

bash
curl https://your-domain.com/api/v1/workspaces \
  -H "X-API-Key: pk_live_your_api_key_here"

Option 2: Bearer Token

bash
curl https://your-domain.com/api/v1/workspaces \
  -H "Authorization: Bearer pk_live_your_api_key_here"

Scopes

API keys can be limited to specific scopes for security:

ScopeDescription
*Full access (all permissions)
workspaces:readList and view workspaces
workspaces:writeCreate, update, delete workspaces
boards:readList and view boards
boards:writeCreate, update, delete boards
items:readList and view items
items:writeCreate, update, delete items
columns:readList and view columns
columns:writeCreate, update, delete columns

API Key Management

Workspaces

Workspace Members

Member Roles

  • owner - Full control (only one per workspace)
  • admin - Can manage members and settings
  • editor - Can edit boards and items
  • viewer - Read-only access

Boards

Items

List and filter items. Supports filtering by column values, dates, and special filters.

Views

Manage board views (table, kanban, calendar, chart).

View Types

  • table - Spreadsheet-style table view
  • kanban - Kanban board with columns
  • calendar - Calendar view for date items
  • chart - Charts and analytics

Search

Global search across boards and items. Minimum 2 characters required.

Forms

Create intake forms linked to boards. Form submissions can create items automatically or require approval.

Submission Modes

  • auto - Creates item automatically
  • review - Requires approval before creating item

Columns

Comments / Updates

Activity / Audit Log

Fetch activity feed including audit logs and comments. Supports pagination and filtering.

Query Parameters

  • type - Filter type: all | items | boards | comments
  • table_name - Filter by table: items | boards | columns | invoices
  • record_id - Filter by specific record UUID
  • user_ids - Comma-separated user UUIDs
  • limit - Results per page (default: 50)
  • offset - Pagination offset (default: 0)

Audit Actions

  • INSERT - Record created
  • UPDATE - Record modified
  • DELETE - Record deleted

Email (Gmail Integration)

Send emails through connected Gmail accounts. First retrieve the available accounts, then send.

Invoices

Invoice Types

  • outgoing - Invoices you issue
  • incoming - Bills you receive
  • quote - Price quotes

Invoice Statuses

  • draft, sent, paid
  • pending, overdue
  • cancelled, rejected

Column Types Reference

TypeValue FormatExample
textstring"Hello World"
numbernumber42
statusoption ID"opt-done"
priorityoption ID"opt-high"
dateISO date"2024-12-14"
timeline{start, end}{"start": "2024-12-01", "end": "2024-12-31"}
personuser ID array["user-uuid"]
checkboxbooleantrue
progress0-10075
linkURL"https://example.com"
emailemail"user@example.com"
phonephone"+1234567890"

Code Examples

Python

python
import requests

BASE_URL = "https://your-domain.com/api/v1"
API_KEY = "pk_live_your_api_key_here"

headers = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json"
}

# Get workspaces
workspaces = requests.get(f"{BASE_URL}/workspaces", headers=headers).json()

# Get boards
boards = requests.get(
    f"{BASE_URL}/workspaces/{workspaces[0]['id']}/boards",
    headers=headers
).json()

# Bulk create items
result = requests.post(
    f"{BASE_URL}/boards/{boards[0]['id']}/items/bulk-create",
    headers=headers,
    json={
        "items": [
            {"values": {"col-name": f"Task {i}"}}
            for i in range(1, 11)
        ]
    }
).json()

print(f"Created {len(result['created'])} items")

JavaScript / Node.js

javascript
const API_KEY = 'pk_live_your_api_key_here';
const BASE_URL = 'https://your-domain.com/api/v1';

const headers = {
  'X-API-Key': API_KEY,
  'Content-Type': 'application/json'
};

async function main() {
  // Get workspaces
  const workspaces = await fetch(`${BASE_URL}/workspaces`, { headers })
    .then(r => r.json());

  // Get boards
  const boards = await fetch(
    `${BASE_URL}/workspaces/${workspaces[0].id}/boards`,
    { headers }
  ).then(r => r.json());

  // Bulk create items
  const result = await fetch(
    `${BASE_URL}/boards/${boards[0].id}/items/bulk-create`,
    {
      method: 'POST',
      headers,
      body: JSON.stringify({
        items: Array.from({ length: 10 }, (_, i) => ({
          values: { 'col-name': `Task ${i + 1}` }
        }))
      })
    }
  ).then(r => r.json());

  console.log(`Created ${result.created.length} items`);
}

main();