Skip to content
Daydreamers

API Reference

Daydreamers API

Import a shoot, pick keepers, finish in Lightroom Classic or Photoshop, and send a gallery. Connect socials and post selected photographs to the accounts you linked, including Stories and highlights. REST over HTTPS is not required for agents: the official connector is MCP.

Introduction

The Daydreamers API lets assistants and apps work a photography job: pick keepers from a shoot, read published plans, and send a gallery copy. Originals stay on the machine unless you publish. There is no clip-farm endpoint and no bulk YouTube clipping.

Base URL:

https://lenslab.dev/api/mcp

Agent-friendly from day one. Workflow, plans, and public notes are MCP tools at https://lenslab.dev/api/mcp. See MCP server.

Quickstart

Three steps: connect, list tools, ask about a shoot.

1. Get an API key

Sign in and open the dashboard. Paid plans unlock workspace tools. Public MCP list/call for workflow, plans, and articles does not need a key.

2. Check your credits

curl https://lenslab.dev/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "foto_plans", "arguments": {} }
  }'

Returns published plan names and monthly amounts in USD. Not a quote.

3. Walk the shoot

curl https://lenslab.dev/api/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": { "name": "foto_workflow", "arguments": {} }
  }'

Authentication

Public MCP tools (workflow, plans, articles) do not need a key. Your Daydreamers account still owns shoots, galleries, and invoices. Do not paste workspace secrets into a prompt. Do not paste a Stripe secret key (sk_ or rk_) into this connector. That key charges money. This URL does not.

Authorization: Bearer your_key_here

If you send a Bearer token, it is treated as an identifier for rate limits only on this public URL. It does not unlock shoots, photographs, or invoices. Rotate from the dashboard. Accounts without an active paid plan receive 403 subscription_required on billed workspace tools, with upgrade_url pointing at /pricing.

What a key can do

A leaked MCP Bearer does not download originals, post to socials, or cut video. Public tools return published copy: the workflow order, plan names, and blog titles. A Stripe secret key is a different object. If it leaks, anyone can create charges. Keep Stripe keys on the server. Never commit them. Never drop them in a chat.

KindPrefixRequiredDescription
Public MCPnoneoptionalNo key. 60 calls / minute per IP. JSON only. No files.
MCP BearerBeareroptionalOptional identifier. Does not grant shoots or photos. Same 60 / minute cap.
Stripe publishablepk_optionalBrowser checkout. Cannot charge on its own.
Stripe secret / restrictedsk_ / rk_requiredServer only. Can create Checkout Sessions and products. Never in the client or this MCP URL.

Rate limits & plans

Per-client limits are enforced at the connector. Hitting them returns 429 Too Many Requests with Retry-After. A JSON-RPC batch counts as one call per item. Bodies over 64 KB and batches over 10 are rejected.

FieldTypeRequiredDescription
MCP list/call60 / minuteoptionaltools/list and tools/call share this cap per IP or Bearer prefix.
Concurrent Lightroom jobs3optionalAt most three Lightroom Classic handoffs can run at once per account.
Failed billed calls20 / houroptionalTwenty failing billed calls in an hour pause further billed calls until the window resets. Read tools stay up.
Auth failures10 / minuteoptionalRepeated invalid-key attempts on the same prefix are rate-limited.

Photo credits are not a rate limit. They reset with the billing cycle. Hobby is USD 20 / month (1,000 credits). Creator is USD 30 / month (5,000 credits, Adobe). Arena is USD 200 / month (25,000 credits). Enterprise is custom.

Stripe

Checkout uses Stripe Prices with lookup keys. Yearly is twelve months prepaid at the yearly monthly-equivalent. This table is the catalog. It is not a live quote.

Lookup keyAmountRequiredDescription
hobby_monthly2000optionalHobby USD 20 / month. 1,000 photo credits.
hobby_yearly19200optionalHobby USD 16 / month billed yearly.
creator_monthly3000optionalCreator USD 30 / month. 5,000 photo credits.
creator_yearly28800optionalCreator USD 24 / month billed yearly.
arena_monthly20000optionalArena USD 200 / month. 25,000 photo credits.
arena_yearly192000optionalArena USD 160 / month billed yearly.

Errors

Errors are returned as JSON with error (a stable code you can branch on) and message (a human-readable string).

FieldTypeRequiredDescription
400bad_requestoptionalInvalid request body. Common codes: invalid_json, unknown_tool, missing_arguments, shoot_unavailable.
401invalid_api_key / api_key_revoked / account_not_foundoptionalMissing or malformed Authorization header, revoked key, or the account associated with the key has been deleted.
402insufficient_creditsoptionalNot enough photo credits to start the job. Body includes credits_remaining, credits_needed, and upgrade_url.
403subscription_requiredoptionalYour Daydreamers account has no active paid plan. Response includes upgrade_url pointing to /pricing.
404not_foundoptionalShoot, gallery, or job does not exist, or is not owned by the authenticated account.
409cannot_canceloptionalAttempting to cancel a send that is no longer scheduled (already processing or delivered).
429rate_limitoptionalPer-account rate limit hit. Honor the Retry-After header if present.
500server_erroroptionalTemporary server error. Safe to retry idempotent reads. Do not retry billed writes without idempotency.
503usage_unavailableoptionalCredit usage could not be read temporarily. Safe to retry foto_plans.

Clipping

Clipping here is picking: take a huge card and keep the frames that are actually the night. Daydreamers flags blur, blinks, and near-duplicates. You still mark the keepers. Rejects are flags, not deletes.

Call the workflow tool when an assistant needs the order of work:

{
  "method": "tools/call",
  "params": { "name": "foto_workflow", "arguments": {} }
}

Captions

Gallery captions are titles and notes you attach to a delivered photograph. They do not reframe the file and they do not burn social-video styles onto a clip.

Write captions in the gallery before you send. Assistants can list public notes with foto_articles.

Automations

Connect social accounts in Connectors. One send can go to the feed, Stories, and specific highlights on the accounts you linked. Daydreamers does not post to accounts you have not connected, and it does not watch a YouTube channel for new uploads.

Scheduling

Schedule a gallery send or a social post of photographs you already picked. Live destinations are the accounts you connected. Instagram, Facebook, and Threads post only when that account is linked.

Credits

Photo credits come with the published plan. Confirm the amount at checkout.

{
  "method": "tools/call",
  "params": { "name": "foto_plans", "arguments": {} }
}

Hobby 1,000 / month. Creator 5,000 / month. Arena 25,000 / month. Unused credits do not roll into cash.

MCP server

Streamable HTTP at https://lenslab.dev/api/mcp. Tools: foto_workflow, foto_plans, foto_articles.

Install from the MCP page for Claude, ChatGPT, Cursor, Grok, or Julius. Source lives on GitHub.

from openai import OpenAI

client = OpenAI(
    api_key="<YOUR_XAI_API_KEY_HERE>",
    base_url="https://api.x.ai/v1",
)

response = client.responses.create(
    model="grok-4.6",
    input="Pick keepers from tonight's shoot and send a gallery copy.",
    tools=[{
        "type": "mcp",
        "server_url": "https://lenslab.dev/api/mcp",
        "server_label": "daydream",
    }],
)
print(response.output_text)

Changelog

2026-09-10 · Public connector

  • MCP tools for workflow, plans, and public articles.
  • Lightroom Classic and Photoshop on the connectors arc.
  • Errors documented as stable JSON codes.