Huecraft Start free

API reference

Huecraft API.

Everything the app does goes through this JSON API. These are the customer endpoints; account administration endpoints are not published.

Basics

  • Base URL: https://gethuecraft.com (the app and the API share the host).
  • Auth: Authorization: Bearer <token> on every call except register and login. Get the token from POST /api/auth/login.
  • Format: JSON in and out, except the compare upload and brand creation, which are multipart, and files (PNG, PDF, SVG) which return their own type.
  • Jobs: generation is asynchronous: POST /api/brand/generate answers 202 with job_id; poll GET /api/brand/jobs/{job_id}.
  • Health: GET /health returns {"ok":true} with no auth.
# sign in, then start a job
curl -s https://gethuecraft.com/api/auth/login -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","password":"..."}'
curl -s https://gethuecraft.com/api/brand/generate -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"business_name":"Kettle & Kiln","personality":["earthy","patient","playful"]}'
# {"job_id":"...","status":"queued","poll":"/api/brand/jobs/..."}

Authentication

POST/api/auth/register

Create an account. Body: email, password (8+ characters), full_name. Returns a token and the email.

{"email":"[email protected]","password":"correct horse battery","full_name":"Your Name"}
POST/api/auth/login

Sign in. Body: email, password. Returns token, email, name.

{"email":"[email protected]","password":"correct horse battery"}
GET/api/auth/me

The signed-in account.

PATCH/api/auth/me

Update your name.

{"full_name":"New Name"}
PATCH/api/auth/password

Change your password. Body: current_password, new_password.

{"current_password":"...","new_password":"..."}
POST/api/auth/logout

End the session.

DELETE/api/auth/me

Delete your account and its kits.

Brand kits

POST/api/brand/generate

Start a generation job from a brief. Returns 202 with job_id and a poll URL. business_name is required.

{"business_name":"Kettle & Kiln","business_description":"Handmade stoneware and weekend classes","industry":"Pottery studio","target_audience":"Adults in Portland","personality":["earthy","patient","playful"],"color_preference":"warm browns"}
GET/api/brand/jobs/{job_id}

Job status: status (queued, running, done, failed), progress, stage, kit_id when done; the kit is embedded on completion.

GET/api/brand/kits

Your kits, newest first (up to 50).

GET/api/brand/kits/{id}

One kit: params and the full kit JSON.

DELETE/api/brand/kits/{id}

Delete a kit.

GET/api/brand/kits/{id}/logo.png

The kit's current logo as PNG.

GET/api/brand/kits/{id}/guidelines.pdf

The brand guide PDF, rendered on request if missing.

GET/api/brand/kits/{id}/research

Research behind the kit as JSON; .md for Markdown; /research/{file} for a captured file.

Chat, compare, mockups

POST/api/brand/kits/{id}/chat

Ask the kit something. Body: message. Returns the reply; the thread is saved.

{"message":"Why this accent color?"}
GET/api/brand/kits/{id}/chat

The saved conversation.

POST/api/brand/kits/{id}/compare

Multipart upload, field file: an alternative logo image. Returns a score comparison and a brief of the differences.

GET/api/brand/kits/{id}/mockups

Which mockup types exist for this kit and which are not yet generated.

POST/api/brand/kits/{id}/mockups/generate

Render mockups. Body: types, any of app_icon, sticker, pattern, notepad, business_card, coffee_cup, shopping_bag, packaging_box. Omit for all.

{"types":["business_card","coffee_cup"]}
GET/api/brand/kits/{id}/mockups/{type}.png

One rendered mockup.

Studio

GET/api/studio/workspaces

Your workspaces with role and brand count.

POST/api/studio/workspaces

Create a workspace. Body: name.

{"name":"Northwind Legal"}
GET/api/studio/workspaces/{ws}/members

Members and pending invites.

POST/api/studio/workspaces/{ws}/members

Invite by email with a role (admin).

{"email":"[email protected]","role":"editor"}
PATCH/api/studio/workspaces/{ws}/members/{uid}

Change a member's role (admin). DELETE removes them.

{"role":"admin"}
POST/api/studio/invites/{token}/accept

Accept an invite link.

GET/api/studio/workspaces/{ws}/brands

Brands in a workspace.

POST/api/studio/workspaces/{ws}/brands

Create a brand (multipart): name, brief fields, colors, fonts and the mark file, or from_name=1 to draft a mark (editor).

GET/api/studio/brands/{id}

A brand with every element's state and files.

PATCH/api/studio/brands/{id}

Update brand fields (editor).

{"colors":{"primary":"#1F4E79","accent":"#D4A72C"}}
POST/api/studio/brands/{id}/build

Queue a build; body may list elements to skip. 409 if one is already running (editor).

{"skip":["cover_research"]}
POST/api/studio/brands/{id}/approvals

Approve or request changes on an element (admin). Body: element, decision, note.

{"element":"logo_suite","decision":"approved","note":"Ship it"}
GET/api/studio/brands/{id}/files/{element}/{path}

Download one built file.

Build a request

Pick an endpoint and copy a ready-to-edit curl line. Nothing is sent from this page, and no key is handled here.

Errors and limits

  • Errors are JSON: {"error":"..."} with 400 for a bad request, 401 for a missing or expired token, 403 for a role you don't have, 404 for a kit or job that isn't yours, 409 for a duplicate email or a build already running.
  • Plan limits apply to kit generation: one a month on Free, ten on Pro, unlimited on Agency.
  • Rate limits for the API are to be confirmed before publication; today they are not enforced beyond plan limits.

Endpoints checked against the running product on 9 October 2026.