rstags

Tagging API for developers

Zero hallucinated tags.
Sub-second answers.

Send content and your tag pool. rstags returns only tags from that pool, each with a calibrated score, and it does it without generating a word.

Every tag it returns is one you defined.

  • First 10,000 tags free
  • No credit card
  • Content is never stored
Response
{
  "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": 9996 }
}

Tags applied through rstags

5,115,295

Labels it applies, for example

  • billing
  • refund-request
  • bug-report
  • churn-risk
  • feature-request
  • onboarding
  • password-reset
  • shipping-delay
  • integration-issue
  • resolved

Fast because it is not writing.
Honest because it cannot.

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. That one difference is both promises.

Zero hallucinations

It cannot invent a tag

  • The model answers yes or no about each tag you supplied. There is no step at which a new string could be produced.
  • No misspelled labels, no near-synonyms, no sentence where you expected a tag.
  • No free text to parse, so no JSON repair and no retry loop around a model that rambled.

Speed

Nothing to wait for

  • Nothing is generated. The model reads your content and returns probabilities, so there are no output tokens to stream.
  • Pools are split into batches of fifty and scored in parallel under one deadline.
  • Sub-second for a typical pool, end to end.

rstags runs on Jev by TypeSafe AI (typesafe-ai/jev), which publishes its own latency and calibration benchmarks.

A prompt guesses. rstags decides.

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 promptrstags
Hallucinated tagsPossible, and silentZero, by construction
Time to answerGrows with every token it writesNo output tokens to wait for
A score for every tagNoYes, for the whole pool
Unparseable responseYour problemRetried, then surfaced as an error
Selection ruleWhatever the model feltYour threshold, ranked, capped
SetupPrompt engineeringOne POST
CostPer token, output included$50 per 100,000 tags

How it works

No training data. No fine-tuning. Just scores.

Everything you need to tag text

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.

Your rule, not the model’s mood

Tags above your threshold, ranked best first, capped at 5 by default. The same input and settings select by the same rule every time.

Built on Jev

An evaluation model from TypeSafe AI that returns typed decisions instead of text, which is where both the speed and the zero come from.

One endpoint

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.

Rules in plain English

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.

Batching built in

Pools up to 500 tags are split into batches and evaluated in parallel under one deadline. A big taxonomy needs no orchestration on your side.

The same call, whatever the text

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

  • billing0.94
  • churn-risk0.78
  • urgent0.72
  • bug0.11
  • feature-request0.03
  • onboarding0.02

3 of 6 cleared the 0.7 threshold · 6 decisions billed

One endpoint.
No SDK required.

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.

  • REST over HTTPS, no client library to install
  • Scoped API keys, revocable from the dashboard
  • Usage and balance on every response
  • Idempotency keys for safe retries
  • Your threshold and tag cap, per request
Example request
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"]
  }'

Who uses rstags

Developers

Stop shipping a prompt that returns a tag you never defined. Get a label and a number your code can branch on.

AI engineers

A calibrated classifier for routing, filtering and guardrails, without assembling a training set for every new label.

Support leads

Tag every ticket consistently, including the ones that arrive at 2am, and get a taxonomy your reports can trust.

Sales ops

Classify inbound by intent and push it to the CRM before anyone opens it. Score thresholds decide what is worth a human.

Data teams

Backfill labels across a table of free text. The same pool, the same threshold, the same result every run.

SaaS founders

Ship the categorization feature your customers keep asking for this week, without a model to train or a prompt to babysit.

When it fails,
it fails loudly.

A fast answer is only useful if a slow or broken one cannot pass for it. Every failure is a clear error with nothing billed, never a half result dressed up as a success.

Retries that mean something

An unreadable answer is retried. An empty result is a legitimate answer and is returned as one.

Deadlines, not hangs

Every attempt runs under a timeout you can set per request, inside an overall deadline.

No silent truncation

Oversized content is rejected, or truncated only when you ask and flagged in the response.

Billed for what ran

If the model is unavailable, nothing is charged and the response says so.

Simple pricing, per 100,000 tags

One number. No seats, no plans, no minimum, and nothing that expires.

Pay as you go

$50per 100,000 tags

The first 10,000 are free, on every account.

  • Pay per tag decision, not per seat
  • Buy 100,000 at a time, as often as you need
  • Credits never expire
  • No subscription, no monthly minimum
  • Pools up to 500 tags
  • Every score returned, not just the winners
Start tagging free

What a job costs

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.

1,000 tickets against a 50 tag pool50,000 decisions
$20
10,000 reviews against a 20 tag pool200,000 decisions
$95
100,000 emails against a 10 tag pool1,000,000 decisions
$495

Duplicate tags collapse and a fallback tag is never billed, so a request always costs at most the number of tags you sent.

Questions worth asking

What counts as one decision?

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.

What does “zero hallucinations” mean, exactly?

That a tag outside your pool cannot come back, 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. It does not mean every judgement is right: a score can still be too high or too low, which is why you get the score and set the threshold.

How fast is it?

Sub-second for a typical pool, because nothing is generated and the batches run in parallel. We will publish a median once we have measured one over real traffic, not before.

What is Jev?

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.

What happens to my content?

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.

What happens when my credits run out?

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.

How many tags come back?

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.

Your first 10,000 tags
are on us

Create a key, post some text, read the scores. If it does not fit your taxonomy in ten minutes, nothing was spent.