x-api-key header or a logged-in session � making every tool embeddable and usable from your own server.x-api-key request header. Regenerating a key immediately invalidates the previous one.Pass your workspace API key in the x-api-key header on every request. Keys are generated per workspace from the panel above.
All workspace-scoped CRUD routes (characters, apps, stories, NFTs, bots, media, scenes) accept either method. Use API key from external servers, automation scripts, or embedded tools. Use session cookies when calling from the FAE frontend.
x-api-key header and a session cookie. Endpoints labeled are public-embed routes. Endpoints labeled require a logged-in user (TTS, tokens).All errors return a JSON object with an error field describing the problem.
| Code | Meaning | Common Cause |
|---|---|---|
| 200 OK | Success | Request completed normally |
| 201 Created | Resource created | POST returned new resource |
| 400 Bad Request | Validation failed | Missing or invalid fields |
| 401 Unauthorized | Not logged in | Session expired or missing |
| 403 Forbidden | Invalid API key or no access | Wrong key, wrong workspace, or insufficient permissions |
| 404 Not Found | Resource missing | Bad ID or deleted resource |
| 500 Server Error | Internal error | Unexpected server-side failure |
| 503 Unavailable | Service offline | Stripe not configured, no AI agents online |
Returns all NFTs in the workspace where public: true. Pass your API key in the x-api-key header.
| Name | Type | Required | Description |
|---|---|---|---|
| workspace | string | required | Your workspace ID (24-char hex) |
| Name | Type | Required | Description |
|---|---|---|---|
| x-api-key | string | required | Your workspace API key |
Returns public product details for embedding in a checkout widget. Pass your API key as x-api-key header or ?key= query param.
| Name | Type | Required | Description |
|---|---|---|---|
| productId | string | required | The product's ObjectId |
Creates a Stripe Checkout session for a product. Returns a url to redirect the customer to. Pass API key in x-api-key header.
| Name | Type | Required | Description |
|---|---|---|---|
| productId | string | required | ID of an active payment product |
| successUrl | string | required | Redirect URL after successful payment (https) |
| cancelUrl | string | required | Redirect URL if customer cancels (https) |
| customerEmail | string | optional | Pre-fill customer email in checkout |
| ref | string | optional | Custom reference string saved with the order |
| Name | Type | Required | Description |
|---|---|---|---|
| workspace | string | optional | Filter by workspace ID |
| collection | string | optional | Filter by collection ID |
| Name | Type | Required | Description |
|---|---|---|---|
| workspace | string | required | Workspace ID |
| name | string | required | NFT name |
| nftKind | string | optional | master, edition, or collection |
| public | boolean | optional | Visible in public API (default: false) |
| mintCount | number | optional | For edition kind � bulk mint count |
Update any fields on an existing NFT. Send only the fields to change.
Permanently deletes an NFT record. Returns {"success":true}.
Returns all characters for the workspace. Results are cached server-side (60s) and refreshed in the background � first call may be slower.
| Name | Type | Required | Description |
|---|---|---|---|
| workspace | string | required | Workspace ID |
| name | string | required | Character name |
| traits | string[] | optional | Personality trait list |
| background | string | optional | Character backstory |
| model | string | optional | Ollama model name for AI responses |
Routes a message through the AI relay to an available Electron agent (Ollama). Requires a connected FAE desktop app to be online. Times out after 20s.
| Name | Type | Required | Description |
|---|---|---|---|
| characterId | string | required | ID of the character to respond |
| text | string | required | User message |
| model | string | optional | Override Ollama model |
Update character fields. All fields are optional.
Permanently deletes the character and clears related caches.
Returns all apps in the workspace.
Returns all available app starter templates.
| Name | Type | Required | Description |
|---|---|---|---|
| name | string | required | App name (auto-generates slug) |
| workspace | string | required | Workspace ID |
| templateId | string | optional | Starter template ID |
| githubRepo | string | optional | GitHub repo URL to link |
| domain | string | optional | Custom domain (default: slug.faeframeworks.com) |
Returns list of file paths in Google Cloud Storage for this app.
Multipart form upload. Sends a file to GCS under the app's prefix.
| Name | Type | Required | Description |
|---|---|---|---|
| file | File | required | The file binary |
| filename | string | optional | Override destination filename |
Returns all stories in the workspace.
Returns a single story by ID.
Creates a new story. Pass all story fields in the request body.
Updates the story. Auto-sets updatedAt.
Permanently deletes a story.
Returns bots for the workspace (nodes/edges/logs are excluded from list response).
Returns full bot including pipeline nodes and edges.
Creates a new bot. Pass name, workspace, and pipeline config in body.
Starts the bot pipeline. Returns immediately with {"status":"running"}; pipeline runs async.
Sets bot status to idle.
Returns {"logs":[...],"status":"idle|running|error"} for the bot.
Clears all run log entries for the bot.
Permanently deletes the bot and all its data.
{type} with one of: images, videos, audios, documents, models.Returns all files of the given type in the workspace, sorted newest first.
Creates a file record after you've uploaded the binary to GCS directly. The caller must be a workspace editor.
| Name | Type | Required | Description |
|---|---|---|---|
| workspace | string | required | Workspace ID |
| url | string | required | GCS public URL |
| name | string | optional | Display name |
| size | number | optional | File size in bytes |
| mimeType | string | optional | MIME type |
Update metadata fields for a file record (e.g. rename). Caller must be a workspace editor.
Deletes the DB record and removes the file from GCS. Returns {"success":true,"freed":<bytes>}.
Streams the GLB binary from GCS through the FAE server (bypasses browser CORS restrictions for the 3D viewer).
Returns TTS availability and available voices. No auth required.
Returns audio/wav binary. Routed through AI relay to Electron. Persists a TTSJob record.
| Name | Type | Required | Description |
|---|---|---|---|
| text | string | required | Text to synthesize (max 2000 chars) |
| voice | string | optional | Voice ID (default: af_heart) |
| speed | number | optional | Speed multiplier 0.5�2.0 (default: 1.0) |
| workspaceId | string | optional | Associates job with a workspace |
Returns all scenes for the workspace.
Creates a new scene. Pass scene definition fields in the body.
Updates an existing scene record.
Permanently deletes the scene.
Returns all token entries.
Registers a new token record.
| Name | Type | Required | Description |
|---|---|---|---|
| tokenAddress | string | required | On-chain token contract address |
| chain | string | required | e.g. solana |