REST API
CRUD endpoints for plants, events, photos, and insights. Authenticate with a Bearer token.
Plants
/api/plantsplants:readList all your plants with last-watered and last-event timestamps.
curl -H "Authorization: Bearer tnd_mcp_..." \
https://rootnotes.app/api/plantsReturns an array of plant objects, each with an optional primaryPhoto, lastWatered, and lastEvent timestamp.
/api/plantsplants:writeCreate 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/plantsRequired: name (1-100 chars).
Optional: species, location, notes, wateringFrequencyDays, lightRequirement, potType, humidityPreference, mossPoleNeeded, toxic, and various notes/fertilizer fields.
/api/plants/:idplants:readGet a single plant by ID, including its primary photo.
/api/plants/:idplants:writeUpdate 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>/api/plants/:idplants:writePermanently 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.
/api/plants/:id/eventsplants:readList events for a plant with cursor-based pagination.
Query params: limit (default 15), cursor.
/api/plants/:id/eventsevents:writeCreate 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>/eventsOptional: type (defaults to watered), text, occurredAt (ISO 8601), photoIds, growthAmount + growthUnit.
/api/plants/:id/events/monthplants:readList events within a month range. Query params: monthStart and monthEnd (Unix ms).
/api/events/:idevents:writeUpdate an event. If photoIds is provided, it replaces the event's photos.
/api/events/:idevents:writeSoft-delete an event.
Photos
Photos are stored in Cloudinary. The API stores metadata only — upload images to Cloudinary first, then create the record here.
/api/photosplants:writeCreate photo metadata after uploading to Cloudinary.
Required: cloudinaryPublicId, secureUrl, width, height, format.
/api/photos/:idplants:readGet a single photo's metadata.
/api/photos/:idplants:writeUpdate crop coordinates. Required: x, y, width, height.
Insights
/api/insightsinsights:readGet analytics dashboard data including care activity, species distribution, watering streaks, and growth tracking.
curl -H "Authorization: Bearer tnd_mcp_..." \
https://rootnotes.app/api/insights/api/locationsplants:readGet 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