Introduction

Outerfaced is a no-code platform for building purpose-built interfaces for AI automations. Instead of building custom dashboards, you push structured cards to channels via a simple REST API, and your automations instantly have a clean, interactive UI.

Core Concepts

Workspaces

A workspace is the top-level container for your channels. Each user can have up to 3 workspaces. Workspaces have:

  • A name and icon (emoji)
  • A visibility setting (private, protected, public)
  • A layout for how channels are displayed (list, sidebar, tabs, grid)
  • An optional custom slug for a shareable URL (e.g. /w/by-slug/my-workspace)
  • Optional search toggle

Channels

A channel is a live feed of cards. Channels belong to a workspace and are the target for your API calls. Each channel has:

  • A name, description, and icon (emoji)
  • A mode: view (read-only display) or interactive (buttons, inputs, forms)
  • An optional webhook URL to receive interaction events
  • A visibility setting (private, protected, public)
  • Optional attributes — key/value metadata you define

Cards

A card is a structured content block pushed to a channel via the API. Each card contains an ordered array of blocks — the UI elements that make up the card's content. Cards also have a status (default, success, warning, error, pending) which controls the card's border color.

Blocks

Blocks are the building-bricks of every card. There are 10 block types:

Type Description
text Paragraph or heading text
badge Colored status pill
kv Key/value table
image Embedded image
button One or more action buttons
divider Horizontal rule
input Text/number/email/URL input field
select Single-select dropdown
multiselect Multi-select dropdown
toggle Boolean on/off toggle

Interactions

When a user clicks a button, submits a form, or fires a header action, an interaction is logged and optionally dispatched to your webhook URL. This is how your automation receives user input back.

Quick Start

  1. Sign in via Google OAuth at /auth/signin
  2. Create a workspace from the dashboard sidebar
  3. Generate an API key at /dashboard/settings
  4. Create a channel via the API or dashboard
  5. Push a card to the channel:
curl -X POST https://your-domain/api/v1/channels/{channelId}/cards \
  -H "Authorization: Bearer ofd_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "blocks": [
      { "type": "text", "content": "Hello from my automation!" },
      { "type": "badge", "label": "Running", "variant": "pending" }
    ]
  }'
  1. View it live at /c/{channelId}

How Data Flows

Your Automation
     │
     │  POST /api/v1/channels/{id}/cards
     ▼
  Outerfaced API ──► Internal database
                          │
                          │  Realtime subscription
                          ▼
                   Public Channel UI (/c/{id})
                          │
                          │  User clicks button
                          ▼
                   POST /api/interactions
                          │
                          │  Webhook delivery
                          ▼
               Your Automation (webhook_url)