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) orinteractive(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
- Sign in via Google OAuth at /auth/signin
- Create a workspace from the dashboard sidebar
- Generate an API key at /dashboard/settings
- Create a channel via the API or dashboard
- 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" }
]
}'
- 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)