Skip to content
v1 — LIVE

REST API Documentation

Pull greenlight.film project, book, and audiobook data into your own platform. 38 endpoints. Bearer token auth. JSON responses. CORS enabled. Plus a remote MCP server with casting-registry tools.

Quick Start

Base URLhttps://www.greenlight.film/api/v1
1. Sign in and generate an API key from your API keys page
2. Make your first request:
curl -H "Authorization: Bearer gl_pk_your_key_here" \
  "https://www.greenlight.film/api/v1/projects?limit=5"
Response:
{
  "data": [ { "number": 1, "title": "...", "genre": "...", ... } ],
  "meta": { "api_version": "v1", "request_id": "uuid", "timestamp": "ISO" },
  "pagination": { "total": 308, "limit": 5, "offset": 0, "has_more": true }
}

Connect via MCP

The Greenlight MCP server connects AI assistants directly to all three Greenlight catalogues — film development packages, published books, and audiobooks. It speaks MCP Streamable HTTP with stateless JSON, exposes 22 tools, and is hosted remotely, so there is nothing to install:

https://www.greenlight.film/api/mcp

Tools are tier-gated: Free (10 req/hr), Starter (100 req/hr), Growth (1,000 req/hr), Enterprise (10,000 req/hr) — see pricing. MCP requests are metered against the same hourly rate limit as the REST endpoints.

Claude CodeOAuth

One command in your terminal; Claude Code walks you through the OAuth sign-in on first use:

claude mcp add --transport http greenlight https://www.greenlight.film/api/mcp
claude.ai / Claude DesktopOAuth

Settings → Connectors → Add custom connector → paste the server URL. Sign in with your Greenlight account when prompted and click Approve.

https://www.greenlight.film/api/mcp
ChatGPTOAuth

Settings → Connectors → enable Developer mode → Create → paste the server URL with authentication set to OAuth. Sign in when prompted. Works with deep research — see the note below.

https://www.greenlight.film/api/mcp
VS Code / CursorAPI key

Add an HTTP MCP server pointing at the endpoint. In Cursor, add this to .cursor/mcp.json:

{
  "mcpServers": {
    "greenlight": {
      "url": "https://www.greenlight.film/api/mcp",
      "headers": { "Authorization": "Bearer gl_pk_your_key_here" }
    }
  }
}

OAuth (Claude, ChatGPT)

Hosts discover the server via /.well-known/oauth-protected-resource and run OAuth 2.1 with PKCE. Sign in with your Greenlight account and click Approve — no key handling, and your access tier follows your account's plan.

API key (Cursor, SDKs)

Generate a gl_pk_... key from your dashboard and send it as a Bearer token: "headers": {"Authorization": "Bearer gl_pk_..."} in Cursor's mcp.json, or as authorization_token in the Claude API / OpenAI Responses API MCP config.

ChatGPT deep research

The search and fetch tools follow the OpenAI connector contract: search returns ids like project:204, book:{slug}, and audiobook:{slug}, and fetch resolves them to full documents. Results cite canonical URLs on greenlight.film, greenlight-publishing.com, and greenlight-audio.com, so deep-research reports link straight back to the catalogue.

Film projects
get_license_statusTier, rate limit usage, catalogue versions (unmetered)
list_projectsBrowse the film catalogue with filters and sorting
search_projectsSearch projects by title keyword
get_projectFull metadata for a single project
get_reviewsCritic reviews for a project
get_assetsAll image/video URLs for a project
get_deliverableOne deliverable's full text (screenplay, treatment, ...)
get_project_packageComplete project with all deliverables
Books
list_booksBrowse the published novels
get_bookBook detail, author bio, chapter list, store links
get_book_chapterChapter text — free-preview chapters at any tier
export_bookFull book with all chapter content (billed as 5 requests)
Audiobooks
list_audiobooksBrowse audiobooks by language and genre
get_audiobookAudiobook detail with chapter durations
get_audiobook_chapter_audioStreamable audio URL for one chapter
Casting
list_charactersCastable roles parsed from a project's Character Bible — name, age, role, design summary, voice, arc
search_actorsBrowse/search the casting registry: human and synthetic performer profiles
get_actorOne performer profile by slug, incl. synthetic-performer provenance
submit_actorCasting partners add/update performer profiles (write; attributed to your key)
Cross-catalogue
get_catalog_statsAggregate statistics across projects and book genres
searchUnified search across all three catalogues (ChatGPT deep-research contract)
fetchFetch a search result by id — project:241, book:slug, audiobook:slug

Search covers titles (projects) and title/description/genre (books, audiobooks) — not full text. A local stdio package (@greenlight/mcp-server) remains available for legacy setups.

Authentication

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

Authorization: Bearer gl_pk_a1b2c3d4e5f6...

Keys are SHA-256 hashed at rest. The raw key is shown once on creation. Rate limit headers are included on every response:

X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-ResetX-Request-Id

API Tiers

Free
Included with Free account
10 req/hr
Get Started
Starter
Included with Reader & Writer plans
100 req/hr
Subscribe
Growth
Included with Producer plan
1,000 req/hr
Subscribe
Enterprise
Included with Buyer plan / custom
10,000 req/hr
Let's Talk

Free, Starter, and Growth tiers are self-service — your API tier follows your subscription plan. Enterprise includes dedicated support, custom rate limits, and SLA guarantees — contact us to discuss.

Endpoints

MethodPathDescription
GET/api/v1/healthHealth check
GET/api/v1/projectsList projects with filters, sorting, pagination
GET/api/v1/project-detailSingle project by ?number=N
GET/api/v1/project-batchBatch lookup by ?numbers=1,2,3 (max 50)
GET/api/v1/project-packageFull project: metadata + deliverables + reviews + assets
GET/api/v1/deliverablesProject deliverables by ?number=N&type=screenplay
GET/api/v1/reviewsSimulated critic reviews by ?number=N
GET/api/v1/assetsAsset URLs (poster, covers, boards) by ?number=N
GET/api/v1/searchFull-text search by ?q=term&limit=20&offset=0
GET/api/v1/statsCatalog statistics
GET/api/v1/enumsValid filter values (genres, mediums, styles, ratings, etc.)
GET/api/v1/featuredTop-ranked projects
GET/api/v1/catalogBulk JSON export (counts as 10 requests)
GET/api/v1/blogPublished blog posts with ?tag=&limit=&offset=
GET/api/v1/blog-postSingle blog post by ?slug=
POST/api/v1/webhooksRegister outbound webhook
GET/api/v1/webhooksList registered webhooks
POST/api/v1/webhook-testSend test ping to a webhook
POST/api/v1/webhook-deleteDelete a webhook by ?id=X
GET/api/v1/my-purchasesList your purchased and optioned projects
GET/api/v1/my-assetsGet download links for a purchased project by ?number=N
GET/api/v1/downloadDownload a deliverable file (token-authenticated)
GET/api/v1/download-packageFull download manifest with all file URLs by ?number=N
GET/api/v1/verify-accessCheck if you have access to a project by ?number=N
GET/api/v1/booksList books by ?genre=&author=
GET/api/v1/book-detailBook card + excerpt + chapter list by ?slug=
GET/api/v1/book-chapterChapter text by ?slug=&number= (free-preview chapters; others need Growth)
GET/api/v1/book-packageFull book with all chapter content by ?slug= (counts as 5 requests)
GET/api/v1/book-genresBook genres with counts
GET/api/v1/audiobooksList audiobooks by ?language=&genre=
GET/api/v1/audiobook-detailAudiobook card + chapter durations by ?slug=
GET/api/v1/audiobook-chapterChapter audio URL by ?slug=&number=
GET/api/v1/charactersCastable roles parsed from a project's Character Bible by ?number=N
GET/api/v1/actorsCasting registry: human + synthetic performers by ?kind=&q=
GET/api/v1/actor-detailOne performer profile by ?slug=
POST/api/v1/actor-submitCasting partners add/update performer profiles (JSON body)
GET/api/v1/search-allUnified search across projects, books, audiobooks by ?q=&types=
GET/api/v1/license-statusYour tier, rate-limit usage, catalog versions (unmetered)

Filtering & Sorting (/projects)

ParameterExampleDescription
genrehorrorFilter by genre
mediumlive-actionFilter by medium
styledarkFilter by visual style
ratingRFilter by content rating
formatfilmFilter by format (film, tv, etc.)
option_statusavailableFilter by availability (available, optioned, sold)
created_after2026-03-01Projects added after date (ISO 8601)
sortcommercial_rankSort by: number, title, commercial_rank, artistic_rank, tv_series_rank
limit25Page size (max 100)
offset0Pagination offset

All filters stack with AND logic. Use /enums to discover valid values.

Webhooks

Subscribe to real-time events. Payloads are HMAC-SHA256 signed with your webhook secret.

new_projectproject_updatedproject_sold

Each delivery includes X-Greenlight-Signature (HMAC), X-Greenlight-Event, and X-Greenlight-Event-Id (for dedup).

Circuit breaker: webhooks auto-pause after 5 consecutive delivery failures. Max 10 webhooks per key.

Test your endpoint with POST /api/v1/webhook-test?id=... before going live.

Asset Delivery

Download deliverables and images for projects you have purchased or optioned.

1. Check access: GET /api/v1/verify-access?number=196 confirms ownership.

2. List purchases: GET /api/v1/my-purchases returns all your purchased and optioned projects.

3. Get asset links: GET /api/v1/my-assets?number=196 returns download URLs for all deliverables and images.

4. Download files: GET /api/v1/download?token=...&type=screenplay downloads a specific deliverable. No API key header needed — the token is the auth.

5. Bulk download: GET /api/v1/download-package?number=196 (Growth+) returns a manifest of all files with download URLs.

Download Token Security

Download tokens expire after 1 hour and are single-use.

Tokens are bound to the API key that generated them. Every download is logged.

Request new tokens by calling /my-assets or /download-package again.

Errors

{
  "error": { "code": "rate_limit_exceeded", "message": "...", "details": { "retry_after": 3600 } },
  "meta": { "api_version": "v1", "request_id": "uuid", "timestamp": "ISO" }
}
400 Bad request401 Unauthorized403 Forbidden (tier/IP)404 Not found429 Rate limited500 Server error

Ready to integrate? Create a free account and generate your API key instantly.