Scores, not guesses
Every tag you send comes back with a probability between 0 and 1. Set the threshold yourself, or store the scores and re-rank later without calling us again.
Tagging API for developers
rstags is the tagging layer for your product. Send content and your tag pool, get back the tags that fit, each with a calibrated confidence score.
Like a classifier you never had to train.
{
"object": "tagging",
"tags": ["billing", "churn-risk"],
"scores": [
{ "tag": "billing", "score": 0.94 },
{ "tag": "churn-risk", "score": 0.78 },
{ "tag": "bug", "score": 0.11 },
{ "tag": "feature-request", "score": 0.03 }
],
"model": "typesafe-ai/jev",
"threshold": 0.7,
"usage": { "decisions": 4, "balance": 999996 }
}Tags applied through rstags
5,110,308
Labels it applies, for example
You can ask a language model to pick tags. It will usually work, and the times it does not are the times you find out in production, from a report built on a tag nobody defined.
| An LLM prompt | rstags | |
|---|---|---|
| Returns only tags you supplied | Usually | Always, by construction |
| A score for every tag | No | Yes, for the whole pool |
| Unparseable response | Your problem | Retried, then surfaced as an error |
| Selection rule | Whatever the model felt | Your threshold, ranked, capped |
| Setup | Prompt engineering | One POST |
| Cost | Per token, output included | $5 per million decisions |
No training data. No fine-tuning. Just scores.
Every tag you send comes back with a probability between 0 and 1. Set the threshold yourself, or store the scores and re-rank later without calling us again.
The model answers yes or no about the tags you supplied. It has no way to invent a new one, misspell yours, or return a sentence where you expected a label.
An evaluation model from TypeSafe AI that returns typed decisions instead of text. No parsing, no JSON repair, no retry loop around a model that rambled.
POST content and tags. There is no project to create, no index to build, no training set to assemble and no model to fine-tune before the first call works.
Pass rules alongside the pool and they are attached to the tags they name. "Tag billing whenever a payment method is mentioned" is the whole configuration.
Pools up to 500 tags are split into batches and evaluated in parallel under one deadline. A big taxonomy costs you latency, not orchestration.
A ticket, a review, an invoice. The pool changes, the request does not.
Content in
My card was declined twice renewing the Pro plan, and now the dashboard says my workspace is read-only. I have a demo on Thursday.
130 characters · 6 tags in the pool
Scores out
3 of 6 cleared the 0.7 threshold · 6 decisions billed
Authenticate with a bearer token, post JSON, read JSON. The response carries the tags, the score for every tag in the pool, and exactly what you were billed.
curl -X POST https://rstags.com/api/v1/tag \
-H "Authorization: Bearer rst_sk_..." \
-H "Content-Type: application/json" \
-d '{
"content": "My card was declined twice renewing the Pro plan.",
"tags": ["billing", "bug", "churn-risk", "feature-request"]
}'Stop shipping a prompt that returns a tag you never defined. Get a label and a number your code can branch on.
A calibrated classifier for routing, filtering and guardrails, without assembling a training set for every new label.
Tag every ticket consistently, including the ones that arrive at 2am, and get a taxonomy your reports can trust.
Classify inbound by intent and push it to the CRM before anyone opens it. Score thresholds decide what is worth a human.
Backfill labels across a table of free text. The same pool, the same threshold, the same result every run.
Ship the categorization feature your customers keep asking for this week, for less than the logging bill.
A text model generates tokens until it decides to stop, then you parse what came out and hope it matches your taxonomy. An evaluation model answers a closed question with a probability. There is no output to validate, so there is nothing to hallucinate.
Sub-second for a typical pool, because the batches run in parallel against one copy of your content.
rstags runs on Jev by TypeSafe AI (typesafe-ai/jev), which publishes its own latency and calibration benchmarks.
An unreadable answer is retried. An empty result is a legitimate answer and is returned as one.
Every attempt runs under a timeout you can set per request, inside an overall deadline.
Oversized content is rejected, or truncated only when you ask and flagged in the response.
If the model is unavailable, nothing is charged and the response says so.
One number. No seats, no plans, no minimum, and nothing that expires.
Pay as you go
$5per million tags
The first 1,000,000 are free, on every account.
One decision is one tag evaluated against one piece of content. A request with a 50 tag pool counts 50 decisions, because each tag is a separate question.
Duplicate tags collapse and a fallback tag is never billed, so a request always costs at most the number of tags you sent.
One tag evaluated against one piece of content. A request with a 50 tag pool counts 50 decisions, because every tag is a separate question. Duplicates collapse and the fallback tag is free, so you are never charged more than the array you sent.
No, and not as a matter of policy. The model is asked a yes or no question about each tag you supplied and answers with a probability. There is no step at which a new string could be produced.
An evaluation model from TypeSafe AI. Instead of generating text it returns typed decisions with calibrated confidence, which is why the response is a set of numbers rather than a sentence to parse.
It is sent to the model to be scored and is not stored. There is no transcript archive on our side, which keeps your retention story short.
The API answers 402 with the number of decisions the request needed and your remaining balance. It never partially evaluates a pool, because half a result is worse than none.
Everything above your threshold, ranked best first, capped at 5 by default. You always get the scores for the rest, so raising or lowering the bar later costs nothing.
Create a key, post some text, read the scores. If it does not fit your taxonomy in ten minutes, nothing was spent.