Why a Plant Diagnosis Should Have History

A row of green leaf markers along a thin timeline, with one larger and glowing brighter than the rest, suggesting a pattern recognized over time

A single diagnosis tells you what's wrong now. A history of them tells you whether you're getting better.

That's the gap PlantLab's new /history endpoint closes.

When you call /diagnose with a photo, you get back a single answer about a single plant at a single moment. Useful, and also limited. You can't tell whether the answer you got today is consistent with the answer you got last week. You can't tell whether the intervention you ran four days ago made things better or worse. You can't see a pattern across photos because the API forgets each call the moment it returns.

That's the gap /history closes.

What changed

Pro and Business accounts now have an opt-in setting that, when turned on, retains diagnosis history. The photo, the answer, the timestamp, the engine version, all queryable through a new /history endpoint. Pro keeps the last 90 days. Business keeps the last 365. Off means nothing is stored. The default is off.

There's also a Home Assistant sensor exposed for the count if you want it on a dashboard. The endpoint supports cursor-based pagination, which matters more than it sounds once you've been growing for a few months and your history grows past a screen.

What you can do with it today

Three things, on day one.

You can see trajectory. Whether a plant is improving or sliding. The leaf that read nitrogen-deficient last Sunday: is it still showing the same signal this Sunday, or has it moved? A single diagnosis can't tell you.

You can spot patterns across plants. If three different plants in the same tent keep coming back as overwatering, the watering schedule is the variable, not the plants. The room is the constant.

You can audit the API itself. Whether the model is consistent shot-to-shot on the same plant under the same conditions. Two photos two minutes apart, same lighting, same angle, should produce broadly the same answer. /history makes that an inspectable claim instead of a vibe.

What I want to build on top of it

The endpoint is the substrate, not the analysis. The reason it has the shape it does, opt-in, retention-bounded, paginated, machine-readable, is that I want certain things to be possible later. None of them exist today. I'm being deliberate about not promising them on a date.

A simple “this plant has been declining for X days” flag, computed from the history rather than the latest photo alone.

Intervention tagging. Mark a diagnosis with “I tried foliar Cal-Mag” and see whether the next photo improves. That requires a feedback loop the current API doesn't have. /history is one half of it.

Anomaly detection that respects time. A plant that's been healthy for six weeks suddenly returning a confident pest signal is a different event from a plant that's been borderline for six weeks. Without history the API has no way to tell those two apart.

All of those features need the data to exist in queryable form before they can be built. That's what /history is for.

The privacy posture

A stateless diagnosis API is genuinely stateless. You send a photo, you get an answer, the photo is gone. That posture is impossible the moment you start retaining anything, so the bar moves: if you're going to store, you store as little as possible, you make it opt-in, you delete on a known schedule, and you never share with a second party.

That's what /history does. Off by default. The toggle is in your dashboard and on the API. Tier-bounded retention. Rolling deletion.

It also slots into a wider set of changes this month that all point in the same direction. Analytics moved to Umami, EU-hosted, cookieless, no consent banner. The CDN moved to Bunny.net in Slovenia. The signup CAPTCHA moved to self-hosted Altcha. Each one of those moves cuts a third party out of the data path between you and PlantLab. Together they shrink the surface area of who sees what.

The point of all of that is straightforward. Your grow data is yours. The job of an API like this isn't to accumulate it, it's to give you an answer and stay out of the way.

How to use it

If you're on Pro or Business, the toggle is in your dashboard under Account settings. The API exposes the same setting. Once it's on, /history returns your diagnoses in reverse chronological order, paginated, with the same field shape as /diagnose plus a timestamp and the engine version.

Full docs at plantlab.ai/docs.

If you build automations and you've been waiting for a way to compare today's reading against last week's, this is the piece that was missing.