Leafy API

Sourced, embeddable plant recognition.

One request, one sourced and cautious result: ranked candidates, genus, confidence level, sources and warnings — never invented certainty.

⚡ Typical latency: 1–2 s
Documentation →

Who it's for

Plant apps & SaaS

Add photo identification to your product, without training a model.

Marketplaces & nurseries

Cataloging, species verification, automatically enriched product sheets.

Education & smart garden

Educational tools, sensors, connected-garden projects, embedded AI.

40,000+
species covered
177
countries in the app
300+
plants with sourced cat/dog toxicity
6 languages
EN · FR · ES · DE · IT · PT

Data as of June 1, 2026.

Main endpoint

POST /v1/identify

Input: 1 to 3 photos. Output: a structured, cautious result.

  • genus — most likely genus
  • confidence — confidence level (likely / probable / uncertain)
  • candidates[] — ranked species with score
  • sources[] — provenance + attributions (CC0/CC-BY)
  • warnings[] — toxicity, ambiguity, low certainty
curl -X POST https://leafyplant.app/v1/identify \
  -H "X-API-Key: YOUR_KEY" \
  -F "photos=@plant.jpg"
import requests

resp = requests.post(
    "https://leafyplant.app/v1/identify",
    headers={"X-API-Key": "YOUR_KEY"},
    files={"photos": open("plant.jpg", "rb")},
)
print(resp.json())
const form = new FormData();
form.append("photos", fileInput.files[0]);

const resp = await fetch("https://leafyplant.app/v1/identify", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY" },
  body: form,
});
const result = await resp.json();
import fetch from "node-fetch";
import FormData from "form-data";
import fs from "fs";

const form = new FormData();
form.append("photos", fs.createReadStream("plant.jpg"));

const resp = await fetch("https://leafyplant.app/v1/identify", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", ...form.getHeaders() },
  body: form,
});
const result = await resp.json();

JSON response

{
  "genus": "Monstera",
  "species": "Monstera deliciosa",
  "confidence": "likely",
  "candidates": [
    { "name": "Monstera deliciosa", "score": 0.91, "family": "Araceae" },
    { "name": "Monstera adansonii",  "score": 0.07, "family": "Araceae" }
  ],
  "warnings": [
    {
      "type": "toxicity",
      "level": "toxic",
      "text": "Toxic to cats and dogs",
      "source": "ASPCA"
    }
  ],
  "sources": [
    { "label": "GBIF",               "license": "CC0"   },
    { "label": "World Flora Online", "license": "CC-BY" }
  ]
}

Interactive documentation (Swagger) →

A result that doesn't lie

likely

Confident enough: an answer you can use directly.

probable

A useful recommendation, but present it with caution.

uncertain

Leafy offers candidates, not a truth. Don't display it as certain.

Leafy vs alternatives

Leafy APIPl@ntNetKindwise
CC0/CC-BY sources in the response
Cat/dog toxicity included
Explicit confidence level
Ambiguity warnings
Free plan, no card
Paid entry price€29 / mo~€100 / mo

* based on public documentation available as of June 1, 2026.

Pricing

PlanPriceMonthly quotaMax RPM
Free
Prototype, integration test
€0 100 calls 10 / min
Starter
Small app, MVP
€29 / mo 10,000 60 / min
Pro
Launched product
€99 / mo 50,000 300 / min
Scale
Strong growth
€299 / mo 250,000 1,000 / min
Enterprise
Mission-critical, guaranteed SLA
custom volume + SLA + certif custom Contact

Monthly subscription, cancel anytime. Secure payment via Stripe. Your API key is sent right after payment.
In active beta: no guaranteed SLA except Enterprise. Data under open license (CC0/CC-BY), in-house engine.

Developer questions

Are my photos used to train your models?

No. Your images are analyzed and then deleted. They are never used to improve or fine-tune our models. Our training data is exclusively under CC0/CC-BY licenses.

Do I need to credit Leafy in my product (attribution)?

Not for the API integration itself. The response data carries the attributions of its original sources (GBIF CC0, WFO CC-BY…), which your app must display if you expose those fields. The API itself requires no visible attribution.

Is the data GDPR compliant?

Leafy is hosted in Europe (Google Cloud europe-west1). Your photos are processed and deleted without retention. You are responsible for your end users' consent; Leafy acts as a processor.

Are plant images stored?

No. Photos submitted to /v1/identify are deleted immediately after processing. Leafy builds no user image database.

What is the RPM (requests per minute) per plan?

Free: 10 RPM · Starter: 60 RPM · Pro: 300 RPM · Scale: 1,000 RPM · Enterprise: custom. On overflow, an HTTP 429 response is returned with a Retry-After header.

Can I cancel anytime?

Yes — monthly subscription with no commitment, cancel from your Stripe dashboard. No penalty, no notice period.

What licenses apply to the returned data?

Taxonomic data comes from CC0 (GBIF) or CC-BY (World Flora Online) sources. Each response contains a sources[] field with the associated license.

Ready to integrate

100 free calls. Key in 30 seconds.

No credit card. Enter your email, copy your key, run your first request.

Documentation →