Back to home

Public Beta

The Aurorashot API is in public beta. Endpoints and response shapes may change before general availability. Breaking changes will be announced in the changelog.

REST API

API Reference

Create, manage, and render cards programmatically. Authenticate with an API key and use any HTTP client — curl, fetch, or your favourite SDK.

Endpoints

GET/api/cards
POST/api/cards
GET/api/cards/:id
PATCH/api/cards/:id
DELETE/api/cards/:id
GET/api/cards/:id/public
POST/api/render
POST/api/export
POST/api/journeys
POST/api/export/journey
GET/api/identities
POST/api/identities
PATCH/api/identities/:id
DELETE/api/identities/:id

Authentication

All endpoints require an API key in the Authorization header. API keys are not scoped — they have full access to your account.

Authorization: Bearer <your-api-key>

Go to Dashboard → API Keys, enter a name, and click +. Copy the key immediately — it won't be shown again.


Base URL

https://aurorashot.com

All paths in this reference are relative to this base.


Cards

Cards are the core resource. Every card has a type, an optional name, and a state object with all tool-specific fields. Partial state is accepted on create — missing fields are filled with per-type defaults.

Card object

{
  "id":        "2c1571c5-c040-47c3-9bbb-a8a73ee02d36",
  "userId":    "r303GGKfkuwNTgsCEEYNBrZegpxpv5LJ",
  "type":      "phone-mockup",
  "name":      "My iPhone Mockup",
  "state":     { ... },
  "createdAt": "2026-04-14T17:15:42.799Z",
  "updatedAt": "2026-04-14T17:15:42.799Z"
}

List cards

GET/api/cards
Query paramTypeDescription
typestringFilter by card type — e.g. metric-card
curl https://aurorashot.com/api/cards \
  -H "Authorization: Bearer <key>"

# filtered
curl "https://aurorashot.com/api/cards?type=metric-card" \
  -H "Authorization: Bearer <key>"

Create a card

POST/api/cards
FieldTypeDescription
typestringrequired Card type key — see Card Types
namestringHuman-readable label (optional)
stateobjectPartial state — missing fields use type defaults
curl -X POST https://aurorashot.com/api/cards \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "type":  "metric-card",
    "name":  "Monthly Revenue",
    "state": { "label": "MRR", "value": "12,400", "unit": "$", "change": "+8%" }
  }'

Returns 201 with the created card. Returns 403 if your plan's card limit is reached.

Get a card

GET/api/cards/:id
curl https://aurorashot.com/api/cards/abc123 \
  -H "Authorization: Bearer <key>"

Returns the card object, or 404 if not found or not owned by you.

Update a card

PATCH/api/cards/:id

State patches are shallow-merged into the existing state — only send the fields you want to change.

FieldTypeDescription
namestringNew display name
stateobjectPartial state patch — merged into existing state
curl -X PATCH https://aurorashot.com/api/cards/abc123 \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{"state": {"value": "14,200", "change": "+14%"}}'

Delete a card

DELETE/api/cards/:id
curl -X DELETE https://aurorashot.com/api/cards/abc123 \
  -H "Authorization: Bearer <key>"

Returns { "ok": true }.

Public card read

GET/api/cards/:id/public

Returns id, type, name, and state without authentication. No user data is exposed. Useful for sharing or embedding.

curl https://aurorashot.com/api/cards/abc123/public

Render

Returns a hosted URL at /c/:id where the card renders full-screen. Open it in a browser, screenshot it with Puppeteer or Playwright, or embed it in an iframe.

POST/api/render

Two modes — reference an existing card by ID, or pass state inline (auto-saves a card).

Mode 1 — existing card

curl -X POST https://aurorashot.com/api/render \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{"cardId": "abc123"}'

Mode 2 — inline state

curl -X POST https://aurorashot.com/api/render \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "tool":  "metric-card",
    "name":  "Quick Render",
    "state": { "label": "Signups", "value": "3,201", "change": "+22%" }
  }'
FieldModeDescription
cardId1ID of an existing saved card
tool2Card type key — creates a card on the fly
name2Display name for the created card (optional)
state2Partial state — merged with type defaults

Response

{
  "cardId":    "abc123",
  "type":      "metric-card",
  "renderUrl": "https://aurorashot.com/c/abc123"
}

Export

Export a card as PNG, GIF, or MP4. The endpoint returns a renderUrl — opening it in any browser automatically runs the export and triggers a download.

GIF and MP4 are generated entirely in the browser using the same pipeline as the card editor (html-to-image + gif.js for GIF, MediaRecorder for MP4). No server-side rendering or headless browser is involved — the browser is the renderer.

POST/api/export

Same two modes as /api/render — existing card or inline state.

PNG export

curl -X POST https://aurorashot.com/api/export \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "cardId": "abc123",
    "format": "png",
    "options": { "pixelRatio": 3 }
  }'

GIF export

curl -X POST https://aurorashot.com/api/export \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "cardId": "abc123",
    "format": "gif",
    "options": {
      "pixelRatio": 2,
      "quality": 6,
      "animSpeed": "fast",
      "animEasing": "snappy",
      "initialDelay": 400,
      "finalDelay": 1000
    }
  }'

MP4 export

curl -X POST https://aurorashot.com/api/export \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "metric-card",
    "name": "MRR animation",
    "state": { "label": "MRR", "value": "12,400", "change": "+8%" },
    "format": "mp4",
    "options": { "fps": 60, "pixelRatio": 2, "animSpeed": "medium" }
  }'

Body fields

FieldTypeDescription
cardIdstringID of an existing saved card (mode 1)
toolstringCard type key — creates a card on the fly (mode 2)
namestringName for the created card (mode 2, optional)
stateobjectPartial state — merged with type defaults (mode 2)
formatstring"png" | "gif" | "mp4" — defaults to "png"
optionsobjectExport options (see below)

Options

OptionTypeDefaultDescription
pixelRationumber2Output resolution multiplier — 1, 2, or 3
qualitynumber8GIF colour depth 1–20 (lower = smaller file, fewer colours)
fpsnumber30MP4 frame rate — 24, 30, or 60
animSpeedstring"medium"Animation speed — "slow", "medium", or "fast"
animEasingstring"smooth"Easing — "smooth", "snappy", "easeInOut", or "linear"
initialDelaynumber600ms held on first frame before animation starts
finalDelaynumber1200ms held on last frame after animation ends

Response

{
  "cardId":    "abc123",
  "format":    "gif",
  "renderUrl": "https://aurorashot.com/c/abc123?autoexport=gif&pixelRatio=2&quality=6&animSpeed=fast"
}

Open renderUrl in a browser to run the export. The page shows a progress indicator, then auto-downloads the file when complete. For automation, poll window.__aurorashot_export — it is set to { status: 'done', format, url } when the download is ready.

Journey export

Export a full Journey sequence (multi-card animated GIF or MP4). Pass either an existing journeyId or inline state — the same two modes as card export. Journey export supports gif and mp4 only (not PNG, since journeys are inherently animated).

POST/api/export/journey
curl -X POST https://aurorashot.com/api/export/journey \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "journeyId": "<id>",
    "format": "gif",
    "options": { "fps": 30, "animSpeed": "medium" }
  }'

Or save a journey first, then export it:

# 1. Save journey state
curl -X POST https://aurorashot.com/api/journeys \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "My Journey", "state": { ...journeyState } }'
# → { "id": "<journeyId>", ... }

# 2. Export it
curl -X POST https://aurorashot.com/api/export/journey \
  -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{ "journeyId": "<journeyId>", "format": "mp4" }'
# → { "journeyId", "format", "renderUrl" }
OptionTypeDefaultDescription
fpsnumber3024, 30, or 60 — playback frame rate
animSpeedstringmedium"slow" | "medium" | "fast"
animEasingstringsmooth"smooth" | "snappy" | "easeInOut" | "linear"

Output resolution. Journey GIFs and MP4s are rendered into a fixed canvas (default 1920×1080). The resolution is stored on the journey at state.journeySettings.exportResolution so it round-trips through the journey CRUD endpoints. You can also override per-export with ?width= and ?height= query params on the returned renderUrl.

// Inside journey state:
"journeySettings": {
  "exportResolution": {
    "width": 1920,
    "height": 1080,
    "preset": "landscape-16-9"  // or "portrait-9-16", "square-1-1", "portrait-4-5", "custom"
  },
  "exportFps": 30,
  // ... other motion settings ...
}

Journeys

Journeys are multi-card animated sequences. Save a journey's state to the API, then use /api/export/journey to get a renderUrl for GIF or MP4 export.

List journeys

GET/api/journeys

Create a journey

POST/api/journeys
FieldTypeDescription
stateobjectrequiredFull journey state snapshot
namestringOptional label for the journey

Get a journey

GET/api/journeys/:id

Update a journey

PATCH/api/journeys/:id
FieldTypeDescription
stateobjectReplace the journey state
namestringRename the journey

Delete a journey

DELETE/api/journeys/:id

Card Types

Use these strings as the type field when creating cards, or as tool in /api/render.

Dev & Code

TypeDescription
github-commitGitHub commit card
prPull request card
releaseGitHub release card
changelogChangelog entry card
github-statsGitHub profile stats
error-cardError / stack trace card
code-compareSide-by-side code diff
stack-cardTech stack card
terminalTerminal output card
jira-cardJira ticket card
gitlab-cardGitLab MR card
code-snippetSyntax-highlighted snippet
browser-cardBrowser window card

Design & Mockups

TypeDescription
phone-mockupiPhone / Android mockup
screenshotBrowser screenshot card

Data & Metrics

TypeDescription
metric-cardSingle metric / KPI
chart-cardBar / line chart
ring-cardProgress ring
kpi-gridMulti-metric grid
leaderboard-cardRanked leaderboard
compare-cardA vs B comparison
gauge-cardGauge / speedometer
score-cardScore with rating
poll-cardPoll results
rating-cardStar / score rating
funnel-cardConversion funnel
timeline-cardVertical timeline
radar-cardRadar / spider chart
heatmap-cardActivity heatmap

Social

TypeDescription
twitterTweet card
linkedinLinkedIn post card
blueskyBluesky post card
discordDiscord message card
slackSlack message card
reddit-cardReddit post card

Text

TypeDescription
text-elementFreeform text / heading block

Identities

Identities store reusable profile data — name, handles, avatar, repo — that auto-fills across card tools in the UI.

Identity endpoints currently require session cookie auth (web UI only). API key support is coming in a future beta release.
MethodPathDescription
GET/api/identitiesList all identities
POST/api/identitiesCreate an identity
PATCH/api/identities/:idUpdate an identity
DELETE/api/identities/:idDelete an identity

Identity fields

FieldTypeReq.Description
labelstringrequiredDisplay name for this identity
isDefaultbooleanSet as the default identity
displayNamestringFull name
avatarUrlstringAvatar image URL
biostringShort bio
twitterHandlestringTwitter/X username
linkedinHeadlinestringLinkedIn headline
blueskyHandlestringBluesky handle
redditUsernamestringReddit username
discordUsernamestringDiscord display name
slackDisplayNamestringSlack display name
githubUsernamestringGitHub username
gitlabUsernamestringGitLab username
defaultRepostringDefault repository (owner/repo)
defaultBranchstringDefault branch name
projectNamestringProject name
projectTaglinestringProject tagline
jobTitlestringJob title
companystringCompany name
teamNamestringTeam name
isVerifiedbooleanShow verified badge

Errors

All errors return JSON with an error string and an appropriate HTTP status.

{ "error": "Human-readable message" }
StatusMeaning
400Bad request — missing or invalid fields
401Unauthorized — missing or invalid API key
403Forbidden — plan limit reached
404Not found — resource doesn't exist or isn't yours

Changelog

2026-04-14

Initial beta release beta

  • Cards CRUD — create, list, get, update, delete
  • Public card read endpoint
  • Render endpoint with cardId and inline-state modes
  • Export endpoint — PNG, GIF, and MP4 via browser-side rendering
  • Identities CRUD (session auth only)
  • API key authentication via Authorization: Bearer