Built on Ring
How Exemplar uses Ring’s platform, with one honest status label on every capability.
The Ring API surface Exemplar uses
One status label on every item, and the code and tests behind it.
Scope. Monitoring needs only read access. The optional Chime action, off by default, is the one call that acts on a device.
- Observed on the Ring Developer Playground
- Exercised against the Playground’s simulated device in our own runs.
- Tested against fixtures or mocks
- Covered by signed fixtures or mocked HTTP. Not exercised live.
- Built behind a flag, off by default
- Implemented and covered by mocks. Switched off unless the flag is set, and not exercised live.
Observed on the Ring Developer Playground
Exercised against the Playground’s simulated device, with the read-only token.
Developer Playground token
Observed on the Ring Developer PlaygroundThe demo environment. A read-only token generated in the Playground (valid for about 30 minutes) is pasted on the Connect screen. The server holds it and never returns it to the browser.
Why this label. Every live run on the Playground used a pasted token.
Connection check and devices
Observed on the Ring Developer PlaygroundProves the token works, discovers the camera, and reads its status, capabilities, configuration and location. Cameras are shown by name in the interface.
- GET users/me
- GET /v1/devices?include=status,capabilities,configurations
- GET /v1/devices/{id}/location
Why this label. Run against the Playground’s simulated device. A live test covers it and runs whenever a token is present.
Event history polling
Observed on the Ring Developer PlaygroundCursor-paginated event history with event_types filters, polled every 15 seconds. Each new event is ingested once and cached by event. Backtests read the same history.
- GET /v1/history/devices/{id}/events
Why this label. Events created with Simulate in the Playground showed up in history and were picked up by the poller.
Event-scoped media download
Observed on the Ring Developer PlaygroundThe clip for perception and a snapshot for the interface. The 303 redirect to a pre-signed URL is followed without the access token; the client waits for the recording to be ready and retries 416 and 425 with backoff.
- POST /v1/devices/{id}/media/video/download
- POST /v1/devices/{id}/media/image/download
Why this label. Every Playground clip Exemplar perceived arrived this way.
WHEP live view
Observed on the Ring Developer PlaygroundLive view in the browser through a server proxy, with 2 fps frame capture feeding a live fact ticker. The proxy forwards the session address untouched and accepts only live-view sessions on Ring’s API. The Ring watermark is never covered.
- POST /v1/devices/{id}/media/streaming/whep/sessions
- DELETE of the session address
Why this label. Run in Chrome against the Playground’s simulated device.
Tested against fixtures or mocks
Paths the Playground cannot drive, covered by signed fixtures and mocked HTTP.
Signed webhooks
Tested against fixtures or mocksAn event-driven path next to polling. The X-Signature HMAC-SHA256 is checked over the raw body with a constant-time compare, the route answers inside Ring’s response window, deliveries are deduplicated on meta.request_id, and the app_integration_added and app_integration_removed lifecycle events are handled. Valid deliveries are forwarded to the engine.
- Webhook deliveries to our route
Why this label. The Playground does not send webhooks, so the route is tested with signed fixtures, including tampered, re-serialised, unsigned and duplicate payloads, in both Node and Python. A replay tool posts the same fixtures to a running app.
OAuth app-integration flow
Tested against fixtures or mocksThe production sign-in path: authorization code with PKCE, rotating refresh tokens, and account linking through app-integrations. The Playground token path is used for the demo.
- Authorization code exchange
- Refresh-token rotation
- POST and PATCH of the app-integration link
Why this label. Tested against mocked HTTP. The Playground has no OAuth client, so the flow has not been run end to end against Ring.
- Tests and notes
While writing the client, we also used the Ring Appstore docs server from our coding assistant to look up endpoints and error codes. It is a development tool, not part of the app.
Chime: an optional action
Presented separately from the read-only monitoring path.
Chime playback (early access)
Built behind a flag, off by defaultAn optional rule action that plays a chime on the camera when a rule fires. It is the one call that acts on a device.
- POST /v1/devices/{id}/media/audio/playback
Why this label. Off unless EXEMPLAR_CHIME_ENABLED is set. Tested against a mocked client. The Playground’s simulated device has no chime slot, so the call has not been exercised live.
- Tests and notes
Event flows
The path each event takes, for the observed route and for the fixture-tested one.
Polling
Observed on the Ring Developer PlaygroundSimulate in the Ring Developer Playground
Poll event history
Every 15 seconds, new events only.
Download that event’s video
Event-scoped, through the pre-signed redirect.
One Claude perception on Amazon Bedrock
16 frames into typed facts.
Facts cached as a trace
Every deployed rule scored on the cached facts
No further model call.
Alert with its witness
The moments and the margin that made the rule true.
Webhooks
Tested against fixtures or mocksSigned webhook arrives
Verify the signature
HMAC-SHA256 over the raw body, constant-time compare.
Deduplicate
On the delivery’s request id.
Forward to the engine
The same pipeline as above
Download, perceive once, score every rule, alert with witness.
Built on Ring’s ring-api-helloworld sample
The web app started as a fork of Ring’s sample. This is what stayed, what grew and what is new.
apps/web is a fork of AmazonAppDev/ring-api-helloworld (MIT licence, copyright 2026 Amazon), taken at commit 76100aa from 2026-07-01. The sample went into this repository unmodified, in a commit of its own, and its licence file is kept as the licence requires. Everything after that commit is Exemplar’s work. The details are in apps/web/UPSTREAM.md.
The sample was a good starting point: its live-view hook worked on the first try, and its processor registry is a clean extension point. Each change we made is written up as a suggestion in the friction log (entries APP-1 to APP-6).
Kept as it is
The WHEP live-view hook, which worked immediately and still drives the live view.
The video-processor plug-in registry. Exemplar’s 2 fps frame grabber is one more processor in it.
The Python helper scripts for devices, history and location, useful for seeing each API’s real response.
Extended
Sample files that grew.
Webhook receiver: the X-Signature HMAC-SHA256 is verified over the raw body with a constant-time compare, deliveries are deduplicated on meta.request_id, and the route answers inside Ring’s response window. The sample’s own path now runs the same verified handler; its event feed for the sample dashboard is kept.
Live-view session route: same-origin check, a restricted device-id alphabet, no redirects followed with credentials attached, and the session DELETE accepts only live-view session addresses on Ring’s API.
Authentication: the devices and config routes share one module that also accepts a Playground token pasted at runtime. The token stays on the server and is never returned.
The development-only webhook test route is switched off in production builds.
Added
New in Exemplar.
The Exemplar interface: Connect, Library, Teach, Rule, Live and Eval screens.
A proxy from the web app to the engine, so the browser only talks to the web app.
Frame capture for the live fact ticker, registered as a video processor.
A signed-webhook replay tool and the shared fixtures behind both test suites.
How Exemplar fits with Ring today
Ring’s own features, in Ring’s words, and what a developer-built app on Ring’s platform adds.
In Ring’s words
Ring’s Wired Doorbell 2K support page lists these among its “Features Included”:
- Single Event Alert (footnote 2)
- Unusual Event Alert (footnote 2)
- Video Descriptions (footnote 2)
- Video Search (footnote 2)
- Package, person, and vehicle detection (footnote 3)
Footnote 2. “Compatible Ring subscription required. Features not available for customers in Illinois due to state-specific legislation. Unusual Event Alerts, Video Descriptions, and Single Event Alert, and Active Warnings availability limited to mobile devices with select primary languages. Unusual Event Alerts trains off Video Descriptions and may be impacted by the number of events and other device limitations.”
Footnote 3. “Compatible Ring subscription required. Available on select devices. This feature is dependent upon network connectivity and other factors.”
Ring’s article Video Descriptions, Single Event Alert (beta) and Unusual Event Alert (beta) describes three of them:
- Video Descriptions
“Provides detailed text of the event which help you quickly scan through your recordings.”
- Single Event Alert (beta)
“Reduces notification clutter by combining similar alerts from the same camera.”
- Unusual Event Alert (beta)
“Reduces notification fatigue by intelligently filtering alerts, only notifying users of unusual events.”
Requirements and availability, as the article states them
“A compatible Ring subscription.”
“The primary language is set to English, Spanish, French, Italian, German, Dutch, or Japanese on the mobile device.”
“Not available for Ring devices in Illinois due to state legislation”
“Beta features are new or experimental. While you get early access to innovative features, results might vary as we continue making improvements based on user feedback.”
Quoted from Ring’s support pages as retrieved on 2026-10-18. Please see those pages for their current wording.
What Exemplar adds, as a developer-built app on Ring’s platform
Rules you teach by example, and can read.
A customer marks a few clips as “yes, like this” or “no”. Exemplar returns a rule printed in plain English by code, never paraphrased by a model. One it learned from Playground clips:
“There is a package k such that (k is on the steps or k is on the porch) continuously for at least 15 s.”
Published in docs/DEVPOST.md, line 54 Rules that unfold over time.
The rule above holds only when the package has been there “for at least 15 s”. The same language expresses a person picking a package up from the steps.
A false-alarm level set before deploying.
You choose the level (10% by default). The firing threshold is set from randomly sampled clips the rule never trained on, so for events like those, the chance of a false alarm is at most the level you chose. docs/DEVPOST.md, line 56.
Teaching per camera, for homes and small businesses.
A rule can be limited to one camera or to hours of the day, so each camera carries its own rules: a front door for a household, a storefront or a loading dock for a small business.
Actions you choose.
When a rule fires, it can raise a notification in the app, call an outbound webhook into a business system, post to Slack, or, behind a flag, play a chime.
Exemplar is an app a customer chooses to connect, using the access Ring grants through its developer platform. It sits alongside Ring’s own alerts and adds rules of the customer’s own, taught by example. Both can run side by side: Ring’s alerts as they are, and Exemplar’s rules for the moments a household or a business has defined for itself.
Designed for the Ring Appstore’s requirements
Design choices we made with the Appstore in mind. They are not a review outcome: shipping through the Ring Appstore is the next step.
Server-side calls only
Every Ring call is made by the engine or the web app’s server routes. The access token is never returned to the browser. The token route.
Read-only monitoring
Monitoring needs only read access. The optional Chime action, off by default, is the one call that acts on a device.
The Ring watermark is never covered
Nothing is drawn over the live video, and overlays on clips sit on the bottom edge. The live screen.
Cameras shown by name, never by identifier
The interface names the camera; device and event identifiers are not displayed.
No facial recognition, no cross-property tracking
Exemplar has no life-safety function. See “Responsible by design” in the README.
Accessibility
Automated checks: 0 axe violations, on every screen of the web app. Details and the command are on the Evidence page.
Developer feedback
What we logged while building on Ring and AWS, with links.
“the Ring API’s combination of event history, event-scoped media download and WHEP live view is the right primitive for event-based AI apps, and the Playground got us to a real end-to-end loop in the first working session.”
51 friction-log entries
Published in docs/DEVPOST.md, line 113
Each entry gives the task, the steps, what we expected and what happened, a severity, the workaround we used and a concrete suggestion. Entries marked live were reproduced against the Ring Developer Playground. The product feedback covers every tool we used: what worked, onboarding, and whether we would build with it again.
A few entries, and what Exemplar does about each
PG-2 · Ring Developer Playground
What we learned. Simulated events arrive as on-demand recordings, listed shortly after they start, with no webhook.
What Exemplar does. Exemplar polls event history and reads each watched clip itself, instead of relying on an event sub-type.
RING-6 · Ring API
What we learned. A video download is a window onto continuous recording, so asking for more than one event’s span runs into the next event.
What Exemplar does. The client always requests exactly the event’s own start-to-end span.
RING-5 · Ring API
What we learned. The pre-signed media link can stay open for tens of seconds while the clip is rendered and watermarked.
What Exemplar does. The media step has its own long read timeout; ordinary calls keep a short one.
RING-14 · Ring API
What we learned. The live-view session URL carries a long query string that is part of the address.
What Exemplar does. The server proxy forwards it untouched and accepts only live-view session URLs on Ring’s own API.
BR-1 · Amazon Bedrock
What we learned. Newer Claude models differ in which request settings they accept, such as temperature, forced tool choice and thinking.
What Exemplar does. One tested recipe per model, with validate-and-retry on the structured output.
OT-10 · Conformal calibration
What we learned. Computing the conformal rank in floating point is off by one for some levels.
What Exemplar does. Exact rational arithmetic, checked by the simulation listed above.