API keys

An API key isn't just a credential — it's a name your agent shows up under. Name a key "Support Bot" and you can assign it a card exactly like you'd assign one to a teammate. Beyond that, it turns Snapi into a backend for anything you run: your ERP posts purchase orders straight onto a board, a nightly script syncs records to your data warehouse. Each key is scoped to your organization, works from any language or tool that can make an HTTP request, and starts with the snapi_ prefix.

Creating an API key

  1. Go to Settings → API Keys.
  2. Enter a descriptive name (e.g., "ERP", "Betty's AI agent Sam").
  3. Choose an access level (see below).
  4. Click Create. The key is displayed once — copy it immediately.

Create one key per system that connects — your n8n instance, each AI agent, the CRM sync, the warehouse label printer. Named keys mean that when Betty's agent misbehaves, you revoke Sam without taking down everything else.

Access levels

Every key carries an access level that caps what it can do — over the REST API and for AI agents via MCP alike:

LevelAllowed
ViewerRead-only: list and read pages, records, boards, comments, files, history.
EditorViewer + create/update records, add and move kanban cards, comment, attach files.
AdminEditor + create/edit/delete pages and boards, delete records.

Give an agent the lowest level that does the job: a reporting bot gets Viewer, a triage agent Editor, and only a workspace-builder agent needs Admin. Exceeding the level returns 403 with the required role in the message.

Webhook config is Admin/Owner-only to read, too. A page's pre_webhook_url, post_webhook_url, onload_webhook_url — and their HTTP methods and headers — are stripped from the response for Viewer and Editor keys, not just hidden in the UI. Those keys still get everything needed to render or fill a record; they just never see the webhook wiring or anything in its headers.

!
The key is shown only once. After you close the dialog, it cannot be retrieved. If you lose a key, revoke it and create a new one.

Key limits per plan

Plan API keys allowed
Free0 — no API access
Builder1
Team, BusinessUnlimited

Authenticating with a key

Pass the key as a Bearer token in the Authorization header (an X-API-Key header also works):

GET /api/v1/entities
Host: api.snapi.ca
Authorization: Bearer snapi_abc123...
i
Naming note: pages are called entities in the API for backwards compatibility — the endpoints below use /entities paths.

Example with curl:

curl https://api.snapi.ca/api/v1/entities \
  -H "Authorization: Bearer snapi_abc123..."

Example with fetch:

const res = await fetch('https://api.snapi.ca/api/v1/entities', {
  headers: { 'Authorization': 'Bearer snapi_abc123...' }
});
const entities = await res.json(); // array of pages

REST API endpoints

Base URL: https://api.snapi.ca/api/v1

Pages

GET/entities
GET/entities/:entityId

Records

GET/entities/:entityId/records
GET/records/:recordId
GET/records/recent
POST/entities/:entityId/records

Public submission (no auth required)

POST/public/submit/:entityId

Public submissions are rate-limited to 30 per minute per IP.

Other endpoints — creating or editing pages, updating and deleting records, Kanban boards, files, and comments — currently require a signed-in user session and are not available with API keys.

Listing records

The records list endpoint supports search, sorting, and pagination:

GET /api/v1/entities/:entityId/records
  ?search=alice
  &sort=created_desc
  &page=1
  &limit=50

search matches against the record title and data. sort accepts created_desc (default), created_asc, updated_desc, title_asc, or title_desc. limit is capped at 100. The response contains data, total, page, per_page, and pages.

Creating a record

POST /api/v1/entities/ent_abc123/records
Content-Type: application/json
Authorization: Bearer snapi_...

{
  "name": "Alice Johnson",
  "email": "alice@example.com",
  "status": "new"
}

Response (201 Created):

{
  "id": "rec_9d3f1e",
  "entity_id": "ent_abc123",
  "title": "Alice Johnson",
  "data": {
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "status": "new"
  },
  "created_at": "2026-07-03T14:22:31.000Z",
  "updated_at": "2026-07-03T14:22:31.000Z"
}

Error responses

Status Meaning
401Missing or invalid API key
402Plan limit reached (seats, boards, API keys, or storage)
403Insufficient permissions for this action
404Page or record not found
409Submission aborted by a pre-event webhook — check the details field
429Rate limit exceeded (API: 100 requests per 5 seconds; public submissions: 30 per minute per IP)

All errors return a JSON body with an error message. Plan-limit (402) errors also include resource, limit, and current.

Revoking a key

Go to Settings → API Keys and click Revoke next to the key. Revocation is immediate — all requests using that key will return 401 from that moment.

i
For AI agent use cases, see AI agents & MCP. AI agents can use the REST API or the live hosted MCP server, both with an API key.