REST API

CRUD endpoints for plants, events, photos, and insights. Authenticate with a Bearer token.

Plants

GET/api/plantsplants:read

List all your plants with last-watered and last-event timestamps.

curl -H "Authorization: Bearer tnd_mcp_..." \
  https://rootnotes.app/api/plants

Returns an array of plant objects, each with an optional primaryPhoto, lastWatered, and lastEvent timestamp.

POST/api/plantsplants:write

Create a new plant. Plant count is enforced by your tier.

curl -X POST -H "Authorization: Bearer tnd_mcp_..." \
  -H "Content-Type: application/json" \
  -d '{"name":"Monstera","species":"Monstera deliciosa","location":"Living room"}' \
  https://rootnotes.app/api/plants

Required: name (1-100 chars).

Optional: species, location, notes, wateringFrequencyDays, lightRequirement, potType, humidityPreference, mossPoleNeeded, toxic, and various notes/fertilizer fields.

GET/api/plants/:idplants:read

Get a single plant by ID, including its primary photo.

PATCH/api/plants/:idplants:write

Update a plant. All fields are optional — only include the fields you want to change.

curl -X PATCH -H "Authorization: Bearer tnd_mcp_..." \
  -H "Content-Type: application/json" \
  -d '{"location":"Bedroom window"}' \
  https://rootnotes.app/api/plants/<plant-id>
DELETE/api/plants/:idplants:write

Permanently delete a plant and soft-delete all its events.

Events

Events are care actions logged against a plant. Types: watered, fertilized, repotted, soil_change, note, journal, growth.

GET/api/plants/:id/eventsplants:read

List events for a plant with cursor-based pagination.

Query params: limit (default 15), cursor.

POST/api/plants/:id/eventsevents:write

Create a care event for a plant.

curl -X POST -H "Authorization: Bearer tnd_mcp_..." \
  -H "Content-Type: application/json" \
  -d '{"type":"watered","text":"Gave a good soak"}' \
  https://rootnotes.app/api/plants/<plant-id>/events

Optional: type (defaults to watered), text, occurredAt (ISO 8601), photoIds, growthAmount + growthUnit.

GET/api/plants/:id/events/monthplants:read

List events within a month range. Query params: monthStart and monthEnd (Unix ms).

PATCH/api/events/:idevents:write

Update an event. If photoIds is provided, it replaces the event's photos.

DELETE/api/events/:idevents:write

Soft-delete an event.

Photos

Photos are stored in Cloudinary. The API stores metadata only — upload images to Cloudinary first, then create the record here.

POST/api/photosplants:write

Create photo metadata after uploading to Cloudinary.

Required: cloudinaryPublicId, secureUrl, width, height, format.

GET/api/photos/:idplants:read

Get a single photo's metadata.

PATCH/api/photos/:idplants:write

Update crop coordinates. Required: x, y, width, height.

Insights

GET/api/insightsinsights:read

Get analytics dashboard data including care activity, species distribution, watering streaks, and growth tracking.

curl -H "Authorization: Bearer tnd_mcp_..." \
  https://rootnotes.app/api/insights
GET/api/locationsplants:read

Get all unique location strings. Returns a flat string array.

Try it live

Test these endpoints directly in your browser with the interactive API tester.

Open API Tester