Appearance
The console
The console at app.servicelabs.dev is where people manage keys, try utilities and watch every call. It shares its look — and most of its layout — with the Emithook console: sidebar on the left, search and account menu on top, ⌘K everywhere.
Signing in
- Continue with Google —
@finnoto.comaccounts sign straight in (a Member account is created the first time). - Email + password — for invited accounts. With two-factor on, you're asked for a 6-digit code next.
- Invite links open a short setup page: your name and a password, or Google.
See API keys & access for roles and rules.
Forgot your password? Use Forgot password? on the sign-in page. The emailed link works once, expires in 60 minutes, and signs you out everywhere when used. Security changes (password, 2FA, new API keys) are always confirmed by email.
Dashboard
Usage and latency across every utility for the selected window (1 h / 24 h / 7 d / 30 d):
- Tiles — requests (with change vs the previous window), success rate, end-to-end p95, Lambda p95, jobs in flight.
- Requests — finished jobs per interval, succeeded vs failed (hatched), hover for exact counts.
- Latency — p50 and p95 over time.
- Recent failures — the latest failed jobs with their error code; click through to the job.
- Utilities — one health row each: requests, success bar, p50/p95, Lambda p95, last used.
How the numbers are computed: Usage & latency.
Utilities
A card per utility with its description, category, 24 h requests / success / p95 and time limit. Open one for three tabs:
| Tab | What it's for |
|---|---|
| Overview | That utility's tiles, charts and recent jobs, for any window. |
| Playground | Edit the input JSON (pre-filled with a working example), pick Sync or Async (with an optional callback URL), and Run. The result appears alongside — status, timing breakdown and the output files with Open links. Validation errors are listed by field. |
| API | Copy-ready curl and Node snippets for sync, async and polling, plus a table of every input field from the utility's schema. |
Playground runs execute as you: they're real jobs (real Lambda invocations, real files), shown in Jobs with source Console and your email, and counted in Usage under Console playground rather than against any API key.
Jobs
Every job, newest first — refreshed every 5 seconds while you're on the first page.
- Filters: utility, status, mode (sync / async), source (API / console), API key, and a job-id search (paste any prefix of
job_…). - Columns: status, job id, utility, mode, source (key name or user), files, total duration, Lambda time, created.
- Click a row to open the job; ⌘/Ctrl-click opens it in a new tab.
A job's page
- Header — utility, job id (copyable), status, mode; Raw JSON shows the full job as the API sees it (plus console-only fields like the input and timeline); Cancel appears while the job is queued.
- Overview — utility, mode, API key or user, created / started / finished, attempts, the utility's HTTP status, client IP, callback status.
- Where the time went — a stacked bar of queue → Lambda → R2 copy → gateway overhead.
- Timeline — every stage with a millisecond clock and the offset from the first event: accepted, queued, started, invoked, the utility's response, storage, succeeded/failed, retries and each callback attempt. Expand Details for the data behind a stage (e.g. the utility's error body).
- Result — the output files (page number or archive path, size, type, Open, Copy URL), or the error card with code, message and upstream status.
- Input — exactly what was sent.
Pages of running jobs refresh themselves until the job finishes.
Usage
Per API key (requests, success rate, p50/p95, and how many calls went to each utility) and per utility (requests, failures, success rate, p50/p95/p99, average Lambda time, last used), for any window. This is the page to watch during a migration.
API keys
- The keys table: name and creator, prefix, allowed utilities, rate limit, created, last used, and actions — Signing secret (view / rotate the key's callback secret) and Revoke.
- Create key opens a form (name, utilities, rate limit, expiry) and then shows the new key and its signing secret once.
- Quickstart — curl snippets for your environment.
- Console playground signing secret (staff only) — the secret for callbacks from Playground runs.
Settings
| Tab | Contents |
|---|---|
| Profile | Your name, email, and how you sign in. |
| Security | Change password; turn two-factor on (setup key + otpauth:// URI for your authenticator app) or off. |
| Members | Admins: invite by email and role (Admin / Member / External) and copy the one-time link; change roles; disable or re-enable accounts; reset someone's 2FA; revoke pending invites. Hidden for external accounts. |
| Appearance | Light / dark / system theme, accent colour and font — saved in your browser. |
Email
Settings → Profile → Email: turn the daily digest on or off. Staff get it by default: every morning, yesterday's requests, success rate, latency, failures by cause, undelivered callbacks and keys about to expire. Send me a test email checks delivery end to end. Admins inviting someone from Settings → Members also email them the invite link.
Keyboard
- ⌘K / Ctrl-K opens the command palette: jump to any page or utility, or paste a job id to open it.
- ↑ / ↓ and Enter to pick, Esc to close.
- The sidebar collapses to an icon rail (the Collapse button at the bottom) and remembers your choice.