Text or image in. Label out.
Classify text and recognize images with your own labels. Free. No account or API key.
Using Jev? sifty answers the same System One API. It is open source and free, and you can host it yourself. Switch with one line
Try an image example, or paste a public image URL.
1,000 free units per IP per day.
Result
Your result will appear here.
Try an example
Using sifty
Send text or an image with your own labels. Get the most likely label back.
HTTP API
curl https://sifty.dev/spam,not+spam/Win+a+free+iPhoneAdd ?verbose=1 for probabilities. Use POST for a batch:
curl https://sifty.dev/ -H 'Content-Type: application/json' \
-d '{"input":["Win a free iPhone","Lunch at noon?"],"labels":["spam","not spam"]}'Image recognition
Send an image instead of, or with, text: a public image URL, or a data:image/…;base64, upload of up to about 6 MB. The same labels, questions and answers apply.
curl https://sifty.dev/ -H 'Content-Type: application/json' \
-d '{"image":"https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg","labels":["cat","dog","other"]}'Ask a question with "question", add text about the image with "input", or use ?labels=cat,dog&image=<url> in a GET. System One requests take a top-level "image" that every question is asked about. Images are never stored: private logs keep only whether it was a URL or an upload, the URL's host, and its size.
Python, and coming from Jev
sifty answers the System One API (POST /v1/systemone), so typesafe-sdk works unchanged. Code written for Jev only needs a different base_url; Noul, Choice and Score questions are all supported.
from typesafe_sdk import Noul, TypeSafeClient
client = TypeSafeClient(
api_key="free",
base_url="https://sifty.dev",
timeout=120,
)
response = client.system_one(
state="I was charged twice.",
questions={"billing": Noul(instructions="Is this about billing?")},
)
print(response.nouls["billing"].noul)Differences from Jev: sifty runs an open model (Qwen3.5-4B) that is not trained for calibration, so treat probabilities as a ranking and check your labels on a few real examples. The code is on GitHub for self-hosting. sifty is an independent project, not affiliated with TypeSafe AI.
Limits
1,000 units per IP per day, reset at 00:00 UTC. A batch counts each text; a System One call counts each question. There is also a shared daily cap of 20,000 units.
Use 2–26 labels, up to 32 texts per batch. The X-RateLimit-Remaining header tracks your allowance. A 429 response includes Retry-After.
How it works
Qwen3.5-4B scores your labels using next-token probabilities in one forward pass. It does not generate a text response. One GPU is always on, so answers usually take about a second; in a traffic spike, an extra GPU can take up to a minute to start.
Requests pass through Cloudflare and RunPod. We retain request text, labels, results, and country/client metadata in private logs for 3 days to understand usage and debug problems. Public statistics contain only aggregates. Please don’t send sensitive data.