# About Name: Digest Description: Release notes, engineering notes and incident reports for Digest, an events API for product teams. URL: https://dmeodigest.superblog.click # Navigation Menu - Releases: https://dmeodigest.superblog.click/category/releases - Engineering: https://dmeodigest.superblog.click/category/engineering - Incidents: https://dmeodigest.superblog.click/category/incidents - Guides: https://dmeodigest.superblog.click/category/guides - About: https://dmeodigest.superblog.click/about - Sign up: https://dmeodigest.superblog.click/about # Blog Posts Each link below is the raw markdown version of a post. The full content of every post is also available in a single file: https://dmeodigest.superblog.click/llms-full.txt - [About Digest](https://dmeodigest.superblog.click/about.md): Release notes, engineering notes and incident reports for Digest, an events API for product teams. - [2.14: streaming responses, and a breaking change](https://dmeodigest.superblog.click/2-14-streaming-responses-and-a-breaking-change.md): Responses can now stream. The v1 batch endpoint is removed, six months after deprecation. Upgrade notes inside. - [2.13: rate limits you can see](https://dmeodigest.superblog.click/2-13-rate-limits-you-can-see.md): Every response now says how much of your limit is left and when it resets. The dashboard shows the same, per key. - [Incident: the cache that lied for forty minutes](https://dmeodigest.superblog.click/incident-the-cache-that-lied-for-forty-minutes.md): On 14 August, reads returned stale data for forty-one minutes. What happened, what we did, and what changes. - [How we test a migration before it runs](https://dmeodigest.superblog.click/how-we-test-a-migration-before-it-runs.md): Every schema change runs against a copy of production, twice, before it touches production once. The pipeline, in detail. - [2.12: the CLI gets a diff](https://dmeodigest.superblog.click/2-12-the-cli-gets-a-diff.md): digest diff shows what an apply would change, before it changes it. Also: config validation, and a faster login. - [Guide: zero-downtime key rotation](https://dmeodigest.superblog.click/guide-zero-downtime-key-rotation.md): Rotate an API key without a second of failed requests, using overlapping keys and the grace period. - [Why our error messages have a number](https://dmeodigest.superblog.click/why-our-error-messages-have-a-number.md): Every error Digest returns carries a stable code. What the codes are for, and how we stop them changing. - [2.11: exports](https://dmeodigest.superblog.click/2-11-exports.md): Export any query to CSV, JSON or Parquet. Runs in the background, notifies when done, and keeps the file for seven days. - [Incident: a bad deploy on a Friday](https://dmeodigest.superblog.click/incident-a-bad-deploy-on-a-friday.md): A configuration change took the API down for six minutes on 3 July. Short account, and why we now deploy on Fridays anyway. - [Guide: reading a trace](https://dmeodigest.superblog.click/guide-reading-a-trace.md): Every request has a trace. Here is how to find it, what each span means, and how to tell our latency from yours. - [2.10: webhooks retry](https://dmeodigest.superblog.click/2-10-webhooks-retry.md): Failed deliveries retry with exponential backoff for 24 hours. The delivery log shows every attempt. - [The queue we replaced](https://dmeodigest.superblog.click/the-queue-we-replaced.md): Three years on a message broker, one month on a table in the database. What we gained, what we gave up, and the numbers.