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.
Create, manage, and render cards programmatically. Authenticate with an API key and use any HTTP client — curl, fetch, or your favourite SDK.
Endpoints
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.
https://aurorashot.com
All paths in this reference are relative to this base.
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.
{
"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"
}| Query param | Type | Description |
|---|---|---|
| type | string | Filter 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>"
| Field | Type | Description |
|---|---|---|
| type | string | required Card type key — see Card Types |
| name | string | Human-readable label (optional) |
| state | object | Partial 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.
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.
State patches are shallow-merged into the existing state — only send the fields you want to change.
| Field | Type | Description |
|---|---|---|
| name | string | New display name |
| state | object | Partial 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%"}}'curl -X DELETE https://aurorashot.com/api/cards/abc123 \ -H "Authorization: Bearer <key>"
Returns { "ok": true }.
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
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.
Two modes — reference an existing card by ID, or pass state inline (auto-saves a card).
curl -X POST https://aurorashot.com/api/render \
-H "Authorization: Bearer <key>" \
-H "Content-Type: application/json" \
-d '{"cardId": "abc123"}'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%" }
}'| Field | Mode | Description |
|---|---|---|
| cardId | 1 | ID of an existing saved card |
| tool | 2 | Card type key — creates a card on the fly |
| name | 2 | Display name for the created card (optional) |
| state | 2 | Partial state — merged with type defaults |
{
"cardId": "abc123",
"type": "metric-card",
"renderUrl": "https://aurorashot.com/c/abc123"
}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.
Same two modes as /api/render — existing card or inline state.
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 }
}'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
}
}'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" }
}'| Field | Type | Description |
|---|---|---|
| cardId | string | ID of an existing saved card (mode 1) |
| tool | string | Card type key — creates a card on the fly (mode 2) |
| name | string | Name for the created card (mode 2, optional) |
| state | object | Partial state — merged with type defaults (mode 2) |
| format | string | "png" | "gif" | "mp4" — defaults to "png" |
| options | object | Export options (see below) |
| Option | Type | Default | Description |
|---|---|---|---|
| pixelRatio | number | 2 | Output resolution multiplier — 1, 2, or 3 |
| quality | number | 8 | GIF colour depth 1–20 (lower = smaller file, fewer colours) |
| fps | number | 30 | MP4 frame rate — 24, 30, or 60 |
| animSpeed | string | "medium" | Animation speed — "slow", "medium", or "fast" |
| animEasing | string | "smooth" | Easing — "smooth", "snappy", "easeInOut", or "linear" |
| initialDelay | number | 600 | ms held on first frame before animation starts |
| finalDelay | number | 1200 | ms held on last frame after animation ends |
{
"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.
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).
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" }| Option | Type | Default | Description |
|---|---|---|---|
| fps | number | 30 | 24, 30, or 60 — playback frame rate |
| animSpeed | string | medium | "slow" | "medium" | "fast" |
| animEasing | string | smooth | "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 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.
| Field | Type | Description | |
|---|---|---|---|
| state | object | required | Full journey state snapshot |
| name | string | Optional label for the journey |
| Field | Type | Description | |
|---|---|---|---|
| state | object | Replace the journey state | |
| name | string | Rename the journey |
Use these strings as the type field when creating cards, or as tool in /api/render.
| Type | Description |
|---|---|
| github-commit | GitHub commit card |
| pr | Pull request card |
| release | GitHub release card |
| changelog | Changelog entry card |
| github-stats | GitHub profile stats |
| error-card | Error / stack trace card |
| code-compare | Side-by-side code diff |
| stack-card | Tech stack card |
| terminal | Terminal output card |
| jira-card | Jira ticket card |
| gitlab-card | GitLab MR card |
| code-snippet | Syntax-highlighted snippet |
| browser-card | Browser window card |
| Type | Description |
|---|---|
| phone-mockup | iPhone / Android mockup |
| screenshot | Browser screenshot card |
| Type | Description |
|---|---|
| metric-card | Single metric / KPI |
| chart-card | Bar / line chart |
| ring-card | Progress ring |
| kpi-grid | Multi-metric grid |
| leaderboard-card | Ranked leaderboard |
| compare-card | A vs B comparison |
| gauge-card | Gauge / speedometer |
| score-card | Score with rating |
| poll-card | Poll results |
| rating-card | Star / score rating |
| funnel-card | Conversion funnel |
| timeline-card | Vertical timeline |
| radar-card | Radar / spider chart |
| heatmap-card | Activity heatmap |
| Type | Description |
|---|---|
| Tweet card | |
| LinkedIn post card | |
| bluesky | Bluesky post card |
| discord | Discord message card |
| slack | Slack message card |
| reddit-card | Reddit post card |
| Type | Description |
|---|---|
| text-element | Freeform text / heading block |
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.
| Method | Path | Description |
|---|---|---|
| GET | /api/identities | List all identities |
| POST | /api/identities | Create an identity |
| PATCH | /api/identities/:id | Update an identity |
| DELETE | /api/identities/:id | Delete an identity |
| Field | Type | Req. | Description |
|---|---|---|---|
| label | string | required | Display name for this identity |
| isDefault | boolean | — | Set as the default identity |
| displayName | string | — | Full name |
| avatarUrl | string | — | Avatar image URL |
| bio | string | — | Short bio |
| twitterHandle | string | — | Twitter/X username |
| linkedinHeadline | string | — | LinkedIn headline |
| blueskyHandle | string | — | Bluesky handle |
| redditUsername | string | — | Reddit username |
| discordUsername | string | — | Discord display name |
| slackDisplayName | string | — | Slack display name |
| githubUsername | string | — | GitHub username |
| gitlabUsername | string | — | GitLab username |
| defaultRepo | string | — | Default repository (owner/repo) |
| defaultBranch | string | — | Default branch name |
| projectName | string | — | Project name |
| projectTagline | string | — | Project tagline |
| jobTitle | string | — | Job title |
| company | string | — | Company name |
| teamName | string | — | Team name |
| isVerified | boolean | — | Show verified badge |
All errors return JSON with an error string and an appropriate HTTP status.
{ "error": "Human-readable message" }| Status | Meaning |
|---|---|
| 400 | Bad request — missing or invalid fields |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — plan limit reached |
| 404 | Not found — resource doesn't exist or isn't yours |
Initial beta release beta
Authorization: Bearer