3.2 KiB
Sticker Wall Images — Integration Guide
The vote-app renders per-session sticker walls as 1920×1080 PNG images with transparent backgrounds. These can be loaded directly as <img> sources to display a session's sticker wall.
Endpoints
Retrieve Sticker Wall Image
GET /stickerwalls/{sessionID}.png
Authentication: None (public endpoint)
Response:
200 OK— image/png body,Cache-Control: public, max-age=3600404 Not Found— no render has been performed for this session yet
Usage: Load directly as an image source:
<img src="https://vote-app.example.com/stickerwalls/42.png" />
Trigger Render
POST /api/stickerwalls/{sessionID}/render
Authentication: Required — X-API-Key header with the upstream API key.
Response:
200 OK— image/png body with the rendered sticker wall403 Forbidden— missing or invalid API key404 Not Found— session has no placed stickers
Response Headers:
X-Sticker-Wall-Rendered: true— a fresh render was performedX-Sticker-Wall-Rendered: false— served from cache (no new stickers since last render)
Behavior
Active Sessions
During an active session, stickers are placed by voters and stored in the database. The sticker wall image is not automatically re-rendered on each sticker purchase (to avoid thrashing).
To get a fresh image during an active session:
- Call
POST /api/stickerwalls/{sessionID}/render - If new stickers were placed since the last render, a fresh image is generated
- The response contains the image bytes directly
Session End
When a session ends, the vote-app automatically renders the final sticker wall image. After this point:
- The image is immutable — it will never be re-rendered
GET /stickerwalls/{sessionID}.pngreturns the final image directlyPOST /api/stickerwalls/{sessionID}/renderreturns the cached final image (withX-Sticker-Wall-Rendered: false)
Historical Sessions
Sessions that existed before this feature was deployed will be rendered on first request (via the render endpoint). Once rendered, they are cached and served normally.
Suggested Integration
Post-Session Retrieval (most common)
After a session ends, load the sticker wall for display or archival:
const sessionId = 42;
const img = new Image();
img.src = `https://vote-app.example.com/stickerwalls/${sessionId}.png`;
img.onload = () => { /* display it */ };
img.onerror = () => { /* no sticker wall for this session */ };
Active Session Preview
To show a "live preview" of the current sticker wall during a session:
async function refreshStickerWall(sessionId) {
const res = await fetch(`/api/stickerwalls/${sessionId}/render`, {
method: 'POST',
headers: { 'X-API-Key': API_KEY }
});
if (res.ok) {
const blob = await res.blob();
const url = URL.createObjectURL(blob);
document.getElementById('sticker-wall-preview').src = url;
}
}
Image Format
- Dimensions: 1920×1080 pixels
- Format: PNG with alpha transparency
- Background: Fully transparent — overlay on any background
- Sticker rendering: Positioned, scaled, and rotated to match the live display