LogoMojo

Developers

Charge logos from your own code.

A REST API over your Logo Mojo account. Create a logo, poll it to ready, pull every asset — or drop the embeddable widget on any page.

Quickstart

1. Create an API key (below, or on your account page). 2. POST a brief to api/v1/logos. 3. Poll GET api/v1/logos/<id> until status is ready. 4. Pull assets.

curl -X POST https://logomojo.app/api/v1/logos \
  -H "Authorization: Bearer lm_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"company":"Northpeak Freight","kind":"abstract","industry":"Logistics","brief":"precise, reliable, unflashy"}'

Authentication

Send your key as a bearer token on every call: Authorization: Bearer lm_live_… for a secret key, or lm_pub_… for a publishable key (widget-safe: create + read only, 5 req/min). Logo Mojo stores only a hash of your key and cannot show it to you again after creation — copy it the moment you create it.

Endpoints

POSTapi/v1/logos

Create a logo. Body: company (required), kind, tagline, industry, brief, style, colours, fonts. A publishable key may only send company/kind/tagline/industry/brief/style. Returns 201 with the logo object, status queued.

GETapi/v1/logos/<id>

Fetch one logo. status: queued → running → finishing → ready | failed. When ready, assets links every file (svg, icon_svg, png, animated_svg, lottie, mp4, glb, guidelines_pdf, zip).

GETapi/v1/logos

List the last 100 logos made with this key.

GETapi/v1/logos/<id>/assets

List every asset file for a ready logo, with its path and size.

GETapi/v1/logos/<id>/assets/<path>

Fetch one asset file directly (binary). Pass the path exactly as listed above, e.g. motion/animated.mp4.

GETapi/v1/logos/<id>/zip

Download the full brand kit ZIP for a ready logo.

GETapi/v1/usage

This key's rate limit, monthly quota and calls used in the last 30 days.

Statuses & errors

A logo moves through queued → running → finishing → ready (or failed, with error set). Building takes several minutes — poll, don't hammer. Errors come back as {"error":{"type":"…","message":"…"}} with an HTTP status: 401 bad or revoked key, 429 rate limit (see Retry-After, X-RateLimit-Limit headers), 404 unknown logo or endpoint, 400 bad request (e.g. asking for assets before the logo is ready).

Rate limits

30 requests/minute for a secret key, 5 requests/minute for a publishable key (create + read only). Monthly call quota depends on plan (10,000/mo on the Developer API plan). Both are visible via GET api/v1/usage and in the live console below.

Webhooks

Set a webhook URL on your key (account page, or below) and Logo Mojo POSTs once a logo finishes: {"type":"logo.ready"|"logo.failed","logo":{…}}, signed with header X-LogoMojo-Signature: t=<unix>,v1=<hex hmac-sha256(webhook_secret, "<t>." + raw body)>. Three delivery attempts with back-off. Verify it like this:

const crypto = require("crypto");

function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  const expected = crypto.createHmac("sha256", secret).update(parts.t + "." + rawBody).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}
// verify(rawBody, req.headers["x-logomojo-signature"], webhookSecret)

Embeddable widget

Drop this on any page with a publishable key — it injects a "Make my logo" button that opens Logo Mojo in a modal:

<script src="https://logomojo.app/widget.js" data-key="lm_pub_your_publishable_key"></script>

Try it live

calls your real account

Test keys are created on your account and left for you to revoke when you're done (account page → API keys).

Raw JSON