Developers v1 Preview

The FindFlower API.

The same identification engine that powers FindFlower, available for your own projects. Bring a photo, get a species, a confidence score, and verified context — through a direct call to our hosted endpoint you can use today, or a full REST API in preview.

Available now

Direct endpoint

POST a photo to our hosted endpoint from any web or server app and get the species, a confidence score, and ranked alternatives back as JSON. No key required during Beta.

Jump to the quickstart
Preview

Hosted REST API

A stateless HTTPS API for server-side and cross-platform use. Documented below and stabilising during preview — sign in to reserve a key and receive launch access.

View the endpoints

Authentication

The hosted API authenticates with a bearer key sent in the Authorization header. Keys are tied to your developer account — sign in to generate yours. The direct endpoint needs no key during Beta.

Your API key Sign in required

Sign in to generate a preview API key and reserve access for launch.

Sign in to continue

Base URL & format

All hosted endpoints are versioned and served over HTTPS. Requests and responses are JSON, except image uploads which use multipart/form-data.

https://api.findflower.ibhx.dev/v1
# Every hosted request carries your key Authorization: Bearer ff_preview_your_key_here Accept: application/json

The base host is a placeholder during preview. The request and response shapes below are stabilising; the direct endpoint quickstart lower down works against the live Beta today.

POST /v1/identify

Identify by image upload

Submit a photo file and receive the ranked species predictions. This is the primary endpoint for gallery uploads and drag-and-drop.

Request · multipart/form-data

# field name: image (JPG, PNG or WEBP, up to 10 MB) curl -X POST https://api.findflower.ibhx.dev/v1/identify \ -H "Authorization: Bearer ff_preview_your_key_here" \ -F "image=@sunflower.jpg"

Response · 200 OK

{ "top": { "name": "sunflowers", "confidence": 0.984 }, "predictions": [ { "name": "sunflowers", "confidence": 0.984 }, { "name": "black-eyed susan", "confidence": 0.009 }, { "name": "gazania", "confidence": 0.004 } ], "model_version": "beta-0.9.4" }

Example use case

A nature journaling app lets users attach a photo to an entry; on save, it calls this endpoint and stores the top species and confidence alongside the note.

POST /v1/identify base64 variant

Identify by camera-captured image

Camera frames captured in the browser are most easily sent as a base64 data URL. The same endpoint accepts a JSON body with an image string, so you don’t need to build a multipart request from a canvas.

Request · application/json

// capture a frame, then POST it as a data URL const dataUrl = canvas.toDataURL("image/jpeg", 0.92); await fetch("https://api.findflower.ibhx.dev/v1/identify", { method: "POST", headers: { "Authorization": "Bearer ff_preview_your_key_here", "Content-Type": "application/json" }, body: JSON.stringify({ image: dataUrl }) });

Response · 200 OK

{ "top": { "name": "rose", "confidence": 0.712 }, "predictions": [ /* ...ranked list... */ ], "model_version": "beta-0.9.4" }

Example use case

A field-guide kiosk uses a live camera; each capture is sent as a data URL and the identification is shown on screen without ever writing a file to disk.

POST /v1/identify/url

Identify by URL

Pass a link to an image, or a YouTube URL. The service resolves a still frame (for YouTube, the thumbnail) server-side, which side-steps the browser’s cross-origin limits.

Request · application/json

curl -X POST https://api.findflower.ibhx.dev/v1/identify/url \ -H "Authorization: Bearer ff_preview_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "url": "https://example.com/tulip.jpg" }'

Response · 200 OK

{ "source": "https://example.com/tulip.jpg", "top": { "name": "tulips", "confidence": 0.883 }, "predictions": [ /* ...ranked list... */ ], "model_version": "beta-0.9.4" }

Example use case

A content tool lets editors paste a stock-photo or video link and automatically tags the botanical subject for their media library.

POST /v1/feedback

Feedback submission

Report whether a prediction was correct, and optionally the true species. These signals feed directly into future model versions.

Request · application/json

{ "predicted": "rose", "confidence": 0.712, "correct": false, "correction": "peruvian lily" }

Response · 202 Accepted

{ "received": true, "id": "fb_8f21c4" }

Example use case

After showing a result, your app offers a “Was this right?” prompt; the answer is posted here so your integration contributes to model quality over time.

GET /v1/wikipedia

Wikipedia info retrieval

A convenience endpoint that returns a concise, verified summary and reference image for a species name — the same context shown in the FindFlower workspace.

Request

curl https://api.findflower.ibhx.dev/v1/wikipedia?name=sunflower \ -H "Authorization: Bearer ff_preview_your_key_here"

Response · 200 OK

{ "title": "Common sunflower", "extract": "The common sunflower (Helianthus annuus) is...", "thumbnail": "https://upload.wikimedia.org/.../sunflower.jpg", "url": "https://en.wikipedia.org/wiki/Common_sunflower" }

Example use case

After identification, an app enriches the result card with a short description and image without integrating a separate encyclopedia source.

Available now

Direct endpoint

The quickest way to integrate today. POST an image to the hosted endpoint that powers FindFlower and get the ranked result back as JSON. Inference runs server-side, so there is nothing to download and no key to manage during Beta — just send the photo.

Identify an image

// send the image as multipart/form-data under the "file" field async function identify(fileOrBlob) { const form = new FormData(); form.append("file", fileOrBlob, "flower.jpg"); const res = await fetch("https://findflower-proxy.fofi.workers.dev", { method: "POST", body: form }); if (!res.ok) throw new Error(`Identify failed: ${res.status}`); return res.json(); }

Response · 200 OK

{ "flower": "sunflower", "confidence": 0.9412, "top_k": [ { "name": "sunflower", "confidence": 0.9412 }, { "name": "black-eyed susan", "confidence": 0.0331 } /* …up to 5 ranked entries… */ ] }

The endpoint is a lightweight proxy in front of a hosted model server. If it has been idle it can cold-start (roughly 30–90s on the first request), so allow a generous timeout and show a friendly loading state.

The current Beta model recognises 116 botanical classes. Predictions are a best guess — always surface the confidence score and the runners-up so your users can judge for themselves.

Building with FindFlower?

Reserve hosted-API access, request additional classes, or tell us what you’re building. We read every message.