API Overview

Base URL

All V1 API endpoints are prefixed with:

/api/v1

For example, to create a channel:

POST /api/v1/channels

Authentication

Include your API key as a Bearer token in the Authorization header:

Authorization: Bearer ofd_your_api_key

See Authentication for details on API key generation and security modes.

Request Format

All request bodies must be JSON with the correct Content-Type header:

Content-Type: application/json

Response Format

All responses are JSON. Successful responses return the resource object or a confirmation message.

Success Example

HTTP 201 Created

{
  "id": "3f7a1b2c-...",
  "channel_id": "9e4d5f6a-...",
  "created_at": "2025-01-15T10:30:00Z"
}

Error Example

HTTP 400 Bad Request

{
  "error": "name is required"
}

HTTP Status Codes

Code Meaning
200 Success
201 Created
204 No content (e.g., DELETE)
400 Bad request — invalid input
401 Unauthorized — missing or invalid API key
403 Forbidden — access denied
404 Not found
429 Too many requests — daily limit exceeded
500 Internal server error

Common Error Messages

Error Cause
name is required Missing required name field
workspace_id is required Missing required workspace_id
blocks are required Missing blocks array in card creation
Daily channel limit reached 50 channels/day cap hit
Daily card limit reached 200 cards/day cap hit
Workspace limit reached 3 workspace cap hit
Channel not found Invalid channel ID
Workspace not found Invalid workspace ID
Unauthorized Bearer token missing or invalid

V1 vs Internal API

Outerfaced has two sets of API routes:

Path Auth Purpose
/api/v1/... Bearer token Public API for automations
/api/... (non-v1) Supabase session Dashboard-internal operations

Use /api/v1/... for all automation integrations. The internal routes require a logged-in browser session.

Timestamps

All timestamps are returned as ISO 8601 strings in UTC:

"created_at": "2025-01-15T10:30:00.000Z"

IDs

All resource IDs are UUIDs (version 4):

"id": "3f7a1b2c-9e4d-5f6a-b7c8-d9e0f1a2b3c4"