Generators API and MCP

One source of truth

The post maker, the email signature generator, the logo finder and the diagram renderer on this hub run on the same code as a public API and an MCP server. Whatever an agent or a script generates looks exactly like what a person makes on these pages, and a fix in one place fixes both.

  • Read-only and public. Nothing is stored; every request builds the artwork and returns it.
  • Rate limited per client, to keep the service fair and stop abuse.
  • Validated. The same limits as the web tools (headline length, allowed brands and colourways). Invalid input gets a clear error, never broken artwork.
  • Guidance included. Agents read the rules at /AGENTS (or the get_brand_guidance tool) before they generate.

Endpoints

EndpointMethodReturnsSame as
/api/v1/social-postGET, POSTSVG post: 1080×1350, 1080×1080 or 1080×1920Post maker
/api/v1/email-signatureGET, POSTJSON { html, text }; ?format=html or textSignature generator
/api/v1/logoGETJSON with SVG and PNG URLs for a brand, colourway and layoutLockup builder
/api/v1/diagramPOSTSVG diagram from a JSON spec, light or darkDiagrams
/api/v1/guidance/<topic>GETMarkdown guidance/AGENTS
/api/v1/openapi.jsonGETOpenAPI 3.1 description with every parameter
/mcpPOSTMCP server (Streamable HTTP, JSON responses)

Examples

# A night post for NorthStar
curl -X POST https://identity.north.ae/api/v1/social-post \
  -H 'content-type: application/json' \
  -d '{"brand":"northstar","layout":"night","kicker":"New in NorthStar Desktop","headline":"Mai now asks before it acts."}' \
  -o post.svg

# An email signature as HTML
curl "https://identity.north.ae/api/v1/email-signature?format=html&name=Layla%20Haddad&title=Head%20of%20delivery&email=layla@north.ae&brand=northstar"

# The NorthStar Admiral lockup for a dark slide
curl "https://identity.north.ae/api/v1/logo?group=northstar-admiral&colourway=snow"

# A diagram
curl -X POST https://identity.north.ae/api/v1/diagram -H 'content-type: application/json' -d '{
  "theme": "light",
  "spec": { "w": 720, "h": 200, "title": "Gateway",
    "nodes": [
      { "id": "u", "type": "actor", "x": 40, "y": 72, "w": 140, "label": "Analyst", "icon": "user" },
      { "id": "g", "type": "service", "x": 260, "y": 72, "w": 180, "label": "Admiral Server", "sub": "Gateway", "icon": "server" },
      { "id": "c", "type": "external", "x": 500, "y": 72, "w": 180, "label": "Anthropic", "img": "anthropic" } ],
    "edges": [ { "from": "u", "to": "g", "label": "Prompt" }, { "from": "g", "to": "c", "kind": "dashed", "label": "Cleared only" } ] } }' -o diagram.svg

The post maker has a Copy API request button that copies the request for the post on screen.

MCP for AI agents

Add the hub as a remote MCP server at https://identity.north.ae/mcp. It offers five tools: get_brand_guidance, create_social_post, create_email_signature, find_logo and render_diagram. SVG results come back as embedded resources.

# Claude Code
claude mcp add --transport http north-brand https://identity.north.ae/mcp

# Clients with a JSON config (Claude Desktop, Cursor, VS Code)
{ "mcpServers": { "north-brand": { "type": "http", "url": "https://identity.north.ae/mcp" } } }

Rate limits and abuse protection

RuleValue
Requests per client30 a minute sustained, bursts of 20 (token bucket). A diagram costs 3.
ClientIP address as seen by our ingress; IPv6 addresses grouped by /64
HeadersRateLimit-Limit, RateLimit-Remaining, RateLimit-Reset; on 429 also Retry-After (seconds)
Request size64 KB body; diagrams up to 120 nodes, 240 edges, 4000 × 4000 px
InputBrands, layouts, colourways, node types and edge kinds are fixed lists; text fields have length limits; diagram logos come only from the technology logo set
Output safetyUser text is escaped; generated SVG and HTML are served with a Content-Security-Policy that blocks scripts and remote loads

Fonts in generated SVG

  • fonts=link (default): the SVG links Helvetica Now from this hub. It renders correctly in a browser on the hub; elsewhere text falls back to Helvetica or Arial.
  • fonts=embed: the fonts are inlined, so the SVG renders the same anywhere. Use it to make a PNG, then delete the SVG: don't publish SVGs with embedded fonts, because that redistributes the font files.
  • fonts=none: system fonts only.
  • For a PNG, render the SVG at its own size in a browser engine (Playwright, Chrome headless) or use the post maker on this hub.

Errors

StatusMeaning
400Invalid input. The JSON body lists every problem in errors.
404Unknown endpoint or topic
405Wrong method
413Body too large
415POST without content-type: application/json
429Rate limited: wait Retry-After seconds

Last updated on 14 October 2026