Help Center

Search our FAQs or browse by category

Help Guides

Full guides from the help content system. Each guide is a real MDX page.

Getting Started

Create your first project, import a script, and restore deleted work.

Editor

Shortcuts, templates, characters, and collaboration in the editor.

AI

Story assistant usage, limits, and the co-writer chat API.

Billing

Upgrades, refunds, and the Stripe customer portal.

Account

Email, deletion, sessions, OAuth apps, signing keys, and exports.

Knowledge Base

In-depth guides drawn from this product's actual API routes.

Troubleshooting

Fixes for error messages you may actually see in this product.

API Reference

Developer surfaces in this product: pages and JSON endpoints.

Knowledge Base

In-depth guides drawn from this product's actual API routes.

getting-started / import

Importing a script (Final Draft, Fountain, PDF, TXT)

Send your file to POST /api/import with { content, fileName } (or { pdf } for PDF text). Supported sources include .fdx, .fountain and .txt; PDF text is extracted server-side. The importer normalizes formatting and runs a format check before creating the screenplay.

import, fdx, fountain, pdf, api/import

getting-started / export

Exporting a script with export jobs

Create an export via POST /api/export-jobs and track it with GET /api/export-jobs, which lists your jobs newest-first. Jobs are processed through the export queue worker, and you can fetch a single job at /api/export-jobs/[id].

export, export-jobs, pdf, queue

ai / chat

Using the AI co-writer chat

POST /api/ai/chat with { message, agentId } (for example agentId co_writer) plus optional scriptContent and history. Responses are rate-limited, cached per prompt, and logged for usage tracking. When no AI provider is configured, the endpoint returns a deterministic sample reply without a model call.

ai, chat, co-writer, agent, api/ai/chat

editor / characters

Managing characters per project

List characters with GET /api/characters?projectId=YOUR_ID; the project must belong to you or you get a 404. Use this to keep a per-project character roster alongside your screenplay.

characters, project, editor, api/characters

editor / collaboration

Commenting and @mentioning collaborators

GET and POST /api/collaboration/comments on a screenplay you own. Comment bodies support @mentions, which notify the mentioned user, and bodies are scanned for abuse before saving. Ownership is enforced per screenplay.

comments, collaboration, mentions, review

billing / portal

Managing billing through the customer portal

POST /api/billing/portal creates a Stripe customer-portal session (via createPortalSession) returning { url }, rooted at /billing. You need an existing subscription with a Stripe customer id, otherwise the API returns a 400.

billing, portal, stripe, subscription

account / security

Securing your account with 2FA (TOTP)

Set up time-based one-time passwords via POST /api/auth/2fa/setup (issuer IDEOSCREEN). Setup is rate-limited to 10 attempts per 15 minutes per user/IP and requires a signed-in session. Complete verification and challenge steps at the sibling 2fa routes.

2fa, totp, security, account

account / privacy

Requesting a GDPR export of your data

List past requests with GET /api/privacy/export and file a new one with POST /api/privacy/export (handled by gdprManager, CSRF-protected and rate-limited). Download the finished bundle at /api/privacy/export/download.

privacy, gdpr, export, data

API Reference

Developer surfaces in this product. Pages are linked; HTTP endpoints are listed as paths because they return JSON, not pages.

Settings > Security > Developer

Read-only overview of your API keys, OAuth applications, and data export requests. No changes can be made here, so no CSRF token is required. Use it to confirm key prefixes, scopes, client redirect URIs, and export status.

Settings > Security > OAuth Applications

Register third-party apps with a name, https redirect URI, and scopes. The client secret is shown once at registration. Issue a single-use 10-minute authorization code with Get code, or Revoke an app to disable it.

GET /api/auth/api-keys and POST /api/auth/api-keys

List your keys (prefixes and scopes only; full secrets are never returned) and create new keys. There is no settings UI that manages API keys, so call this endpoint directly. Review current keys on the Developer page above.

Settings > Security > Sessions

Lists devices signed in to your account with IP address and expiry. Revoke one session or all other sessions; revoking signs that device out immediately.

Settings > Security > Signing Keys

Generate Ed25519 key pairs used for script registration signatures. Only the public key is persisted; the private key is shown once at creation.

Settings > Privacy

File and track data export requests, control consent, or erase account data. The Developer page links here for export management.

Troubleshooting

Fixes for error messages you may actually see in this product.

Could not get CSRF token

Shown when a settings action cannot fetch a CSRF token from /api/csrf before a signed request. Fix: refresh the page and sign in again, disable extensions that block cookies or fetch, then retry the action once.

Invalid code

Shown on the two-factor check when the 6-digit authenticator or backup code is wrong or expired. Fix: enter the current code from your authenticator app (check that your device clock is correct), use an unused backup code if needed, and try once more instead of reusing an old code.

AI capacity is full. Please try again shortly.

Shown when the AI chat queue has no free global slot. Fix: wait a minute and send the message again. Shorter prompts retry faster; do not resubmit repeatedly in the same second.

Import failed

Shown on the Import page when /api/import rejects the upload. Fix: confirm the file is .fdx, .fountain, .txt, .fadein, .celtx, .story, or a text-layer PDF, keep PDFs to text-layer files (image-only or encrypted PDFs are not supported), and retry. If it persists, contact support via the Support page with the file name and exact message.