Developer Center

Build with GENCY lite

Generate Amazon-style A+ Content, run AI image tools, and land device-captured photos into a user's account — all from a single REST API and MCP server.

Quickstart

Get from zero to your first API call in three steps.

  1. 1Open Settings → API Keys in your GENCY lite workspace (owner only) and create a key. The plaintext key is shown only once — copy it somewhere safe.
  2. 2Export it in your shell: export KEY=glk_live_...
  3. 3Call the API to confirm your key and plan:
bashcurl https://lite.gency.ai/api/v1/me \
  -H "Authorization: Bearer $KEY"

A successful response returns your workspace, plan, and credit balance:

json{
  "orgId": "…",
  "plan": "growth",
  "planStatus": "active",
  "credits": { "used": 1200, "limit": 21000, "remaining": 19800, "unlimited": false }
}
A paid plan (Plus / Growth / Pro / Enterprise) is required. Free-plan keys return 403.

Authentication

Every request is authenticated with a Bearer token. Keys are created under Settings → API Keys (workspace owner only) and only a hash is stored — if a key leaks, revoke it and issue a new one.

Authorization: Bearer glk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

The same key works for both the REST API (/api/v1) and the MCP server (/api/mcp).

Credits & errors

Calls deduct workspace credits exactly like the UI (billed to the owner's subscription). Credits are automatically refunded if processing fails.

OperationCredits
A+ Content generation100–2,260
Image edit (i2i)360
Background removal50
Upload / read0
A+ credit range. A+ generation charges a base 100 credits. By default (imagePolicy: "allow_generate") the pipeline may auto-generate supplemental images to fill sections, each billed 360 credits (max 6 → up to +2,160), for a 100–2,260 total. Pass imagePolicy: "reuse_only" to use only the images you provide (base 100, no supplemental image charges).

Errors use a consistent JSON shape:

json{ "error": "description", "code": "insufficient_credits", "required": 100, "available": 40 }
StatusMeaning
401Missing / invalid / revoked key
402Insufficient credits (includes required / available)
403Not allowed (e.g. Free plan)
400Invalid input · SSRF blocked
429Rate limit exceeded
500Internal error
Result images are stored on R2 and returned as a signed URL valid for 1 hour. Download and store them promptly if you need to keep them.

Idempotency. Send an Idempotency-Key header (any unique string) on POST requests to retry safely — a completed request replays its stored response without charging credits again. Same key with a different body returns 422; a still-processing one returns 409. Keys are remembered for 24 hours.

REST API

Base URL https://lite.gency.ai/api/v1. Images accept a public https:// URL or base64 (max 20 MB).

GET/me

Workspace, plan, and credit balance. (See Quickstart.)

POST/uploads

Upload a base64 image and get a 1-hour signed URL back.

bashcurl -X POST https://lite.gency.ai/api/v1/uploads \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"image":"data:image/png;base64,iVBOR..."}'
POST/images/remove-background

Background removal → transparent PNG. (50 credits)

bashcurl -X POST https://lite.gency.ai/api/v1/images/remove-background \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"image":"https://example.com/shoe.jpg"}'
POST/images/edit

Prompt-based image editing (i2i) — background swap, product staging, compositing. (360 credits)

bashcurl -X POST https://lite.gency.ai/api/v1/images/edit \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{
    "prompt": "place the product on a marble kitchen counter, soft daylight",
    "images": ["https://example.com/cutout.png"],
    "aspectRatio": "1:1"
  }'
POST/aplus/generate

Product images → Amazon-style A+ Content PNG (multi-stage pipeline, can take a few minutes). (100–2,260 credits — base 100 + auto supplemental images 360 each, max 6)

bashcurl -X POST https://lite.gency.ai/api/v1/aplus/generate \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{
    "images": ["https://…/1.jpg", "https://…/2.jpg"],
    "categoryId": "fashion",
    "lang": "en"
  }'
categoryId accepts any product category (fashion, beauty, food, electronics, home, pet, and more) and is optional — omit it to auto-detect from the images. An invalid value returns 400 with the list of valid values. Optional version: standard (default), premium (wider, more sections), or pdp (Korean-style vertical detail page). Optional moodId pins the visual mood (design look); omit it to let the pipeline pick a recommended mood. Optional imagePolicy: allow_generate (default — may auto-generate supplemental images, each 360 credits, max 6) or reuse_only (use only the images you provide, no supplemental image charges). Optional format: png (default) or html (also returns a self-contained HTML file).
POST/listing/generate

Amazon listing copy (title, bullets, description, backend search terms) from a generated creative. Pass the creativeId returned by A+ generation. (usage-based, typically ~100 credits)

bashcurl -X POST https://lite.gency.ai/api/v1/listing/generate \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"creativeId":"<uuid from /aplus/generate>","lang":"en"}'
lang is optional — omit it to use the creative's own content language. Response: { listing: { title, bullets[], description, search_terms[] }, credits }.
POST/aplus/translate

Translate a creative into another language and get the full A+ PNG back. The translation is saved as a separate creative linked to the original (visible in the workspace). (usage-based, typically a few hundred credits)

bashcurl -X POST https://lite.gency.ai/api/v1/aplus/translate \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"creativeId":"<uuid from /aplus/generate>","lang":"ja"}'
Response: { png: { url }, creativeId, lang, credits } creativeId is the translated creative's id (a new record linked to the source), not the original one. Returns 409 if a translation job for the same language is already running.

MCP server

A remote MCP (Model Context Protocol) server lets AI agents such as Claude call GENCY lite tools directly. Endpoint https://lite.gency.ai/api/mcp — stateless Streamable HTTP, JSON-RPC 2.0, same API key.

Auth: a static API key (glk_live_…), not OAuth — attach it as an Authorization: Bearer header. Once connected, the agent auto-discovers the tools; nothing else to configure.

Claude Code

bashclaude mcp add --transport http gency-lite https://lite.gency.ai/api/mcp \
  --header "Authorization: Bearer $GENCY_API_KEY"

Codex CLI~/.codex/config.toml (bridge via mcp-remote):

toml[mcp_servers.gency-lite]
command = "npx"
args = ["-y", "mcp-remote", "https://lite.gency.ai/api/mcp", "--header", "Authorization: Bearer ${GENCY_API_KEY}"]

Claude Desktop · Cursor · Windsurf · any mcpServers client

json{
  "mcpServers": {
    "gency-lite": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://lite.gency.ai/api/mcp",
               "--header", "Authorization: Bearer ${GENCY_API_KEY}"]
    }
  }
}
The Claude.ai web/desktop "custom connector" UI expects OAuth servers. Since GENCY lite uses a static API key, connect via the CLI methods above (Claude Code / mcp-remote) instead. OAuth support is on the roadmap.
ToolCredits
gency_list_capabilities0
gency_get_account0
gency_upload_image0
gency_remove_background50
gency_edit_image360
gency_generate_aplus100
gency_start_aplus100
gency_aplus_status0

Call gency_list_capabilities first (free) to learn valid categoryId values, aspect ratios, and limits — it avoids guessing and hitting 400s. Results also include a machine-readable structuredContent object (e.g. { url, credits }) alongside the text, so you don't have to parse URLs out of prose.

Ready-made workflow prompts are exposed via prompts/list: stage_product (cut out + place in a scene) and make_aplus (full A+ page).

Device-capture tools (gency_device_*) are also exposed when the key has the device scope. Tool errors return as result content with isError: true (MCP convention).

Device capture (kiosk · app · camera)

Land photos from a capture device directly into a walk-in user's "My Files" in real time. The device never holds user credentials — the user logs in and consents ("Connect") from their own phone via a QR code.

We host the QR and status screen for you. The device only needs to:

  1. 1POST /api/v1/device/sessions → open the returned displayUrl in the device's browser (we render the QR, "Connected", "Capturing N photos", "Done").
  2. 2Poll the session until status is active, then upload each photo.
  3. 3Call POST /sessions/:id/end when finished.
jsconst BASE = "https://lite.gency.ai/api/v1/device";
const h = { Authorization: `Bearer ${DEVICE_KEY}`, "Content-Type": "application/json" };
const s = await (await fetch(`${BASE}/sessions`, {
  method: "POST", headers: h, body: JSON.stringify({ label: "Booth 1" })
})).json();
showQR(s.pairUrl);                       // or open s.displayUrl on the device screen

// poll until the user connects
let st;
do { await sleep(2500);
     st = await (await fetch(`${BASE}/sessions/${s.sessionId}`, { headers: h })).json();
} while (st.status === "pending");
if (st.status !== "active") return;      // expired, etc.

for (const photo of takePhotos()) {
  await fetch(`${BASE}/sessions/${s.sessionId}/photos`, {
    method: "POST", headers: h, body: JSON.stringify({ image: photo.base64 })
  });
}
await fetch(`${BASE}/sessions/${s.sessionId}/end`, { method: "POST", headers: h });
Requires a key with the device scope (contact the operations team). Sessions expire after 15 min pending / 20 min idle, and uploads to a non-active session return 409.

Ready to build?

Create an API key, or reach us at support@studiolab.ai.

Get your API key
Developers · GENCY lite