API reference · v1

SeeFood REST API

One endpoint that answers one question. Every API scan is recorded in your workspace's scan history with channel api.

Authentication

Create a key under API keys in the app and send it as a bearer token. Keys start with sf_live_, are shown once, and are stored only as a hash. Revoke a key at any time.

Authorization: Bearer sf_live_…

Classify an image

POST /api/v1/classify

Send multipart/form-data with an image field: JPEG, PNG or WebP, up to 5 MB.

curl https://seefoodsystems.com/api/v1/classify \
  -H "Authorization: Bearer $SEEFOOD_API_KEY" \
  -F image=@lunch.jpg
// Node.js 18+
const form = new FormData();
form.append("image", new Blob([await fs.readFile("lunch.jpg")]), "lunch.jpg");

const res = await fetch("https://seefoodsystems.com/api/v1/classify", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.SEEFOOD_API_KEY}` },
  body: form,
});
const scan = await res.json();
console.log(scan.is_hot_dog ? "Hot Dog" : "Not Hot Dog");
# Python
import os, requests

res = requests.post(
    "https://seefoodsystems.com/api/v1/classify",
    headers={"Authorization": f"Bearer {os.environ['SEEFOOD_API_KEY']}"},
    files={"image": open("lunch.jpg", "rb")},
)
print(res.json()["verdict"])

Response

{
  "id": "69413952-892a-4761-b412-66933a69a0db",
  "verdict": "not_hot_dog",
  "is_hot_dog": false,
  "confidence": 0.99,
  "label": "golden retriever dog sitting on grass",
  "reasoning": "The image shows a dog, not a sausage in a bun.",
  "model": "claude-haiku-5-5",
  "latency_ms": 1730,
  "hot_dog_score": null,
  "improvements": [],
  "created_at": "2026-10-17T14:04:14.360Z"
}
idstring (uuid)Scan ID, also shown in your workspace audit log
verdict"hot_dog" | "not_hot_dog"The definitive answer
is_hot_dogbooleanConvenience flag, same as verdict === "hot_dog"
confidencenumber 0–1Model certainty in the verdict
labelstringShort description of what the image shows
reasoningstringOne-sentence explanation
modelstringModel that produced the verdict
latency_msintegerInference time
hot_dog_scoreinteger 0–100 | nullQuality rating, hot dogs only
improvementsstring[]What would raise the score (empty for non hot dogs)
created_atstring (ISO 8601)When the scan was recorded

Errors

Errors return JSON shaped as { "error": { "code", "message" } }.

StatusCodeMeaning
400missing_image / invalid_bodyNo `image` field, or the body isn't multipart/form-data
401invalid_api_keyMissing, malformed or revoked API key
413image_too_largeImage is larger than 5 MB
415unsupported_typeFile isn't a JPEG, PNG or WebP image
429rate_limitedMore than 20 scans per minute for this workspace
502classifier_unavailableThe vision model failed; safe to retry

Limits