AIv4

Decide policies against a conversation

POST/ai/bloobability/v2/decide

Decides every policy you send against one conversation with Bloobability v2. Each result carries two calibrated numbers in [0, 1]: probability (the policy holds) and answerable (the conversation contains enough to judge it). There is no verdict and no threshold: choose your own. A low answerable never changes probability.

Tiers

You choose the model with tier. Nothing routes between tiers or falls back from one to the other, and the response's tier echoes your choice.

  • instant is the fast tier, for short, explicit questions whose deciding facts are stated in the conversation. Its answerable is not a reliable check for missing information: in the latest measured screen it flagged 0 of 60 deliberately unanswerable cases.
  • full is the more capable tier, for reversals, conditions, several speakers, longer threads and conversations that may be missing facts. Use it when unsure.

The tiers are separate models and do not return identical probabilities. Pin the tier, and store model_version, when you compare numbers across requests.

Contract

The body is checked exactly: unknown fields, explicit null, blank strings, duplicate JSON keys and duplicate message or policy IDs are rejected with 400, and error.details names the failing reason, path and rule. Message timestamps, when given, must be RFC 3339 with an offset, non-decreasing, and not later than assessment_time. Bodies over 1 MiB are rejected with 413. A request that exceeds the chosen tier's context is rejected with 422 and never truncated. 429 and 503 model_unavailable mean the model is busy or restarting: retry with backoff. Errors are { "error": { "code", "message", "details" } }; 5xx bodies carry no details.

Policies come back in request order and their IDs are echoed unchanged. The call is stateless.

Headers

AuthorizationRequiredstring

Your API key, sent as a bearer token: Authorization: Bearer <api_key>. Editing this stays in sync with the API key box on the right.

Bearer

Body parameters

JSON
tierRequiredstring

Which model decides. instant is fastest, for short questions with the deciding facts stated; full handles reversals, conditions and missing information. There is no auto.

"instant""full"
messagesRequiredBloobabilityV2Message[]

The conversation in chronological order. Every message is in scope; none are dropped.

Array of BloobabilityV2Message

idRequiredstring

Unique within the request. The model never reads it.

textRequiredstring

The full message text, sent unaltered and never cropped. Instructions inside it are judged as conversation, not followed.

speaker_idoptionalstring

Optional participant identity, consistent within the conversation. Two people never share one, though they may share a role. Omit when unknown.

roleoptionalstring

Optional free-text role such as customer, agent, manager or tool. Custom roles are allowed; system grants no authority.

timestampoptionalstring

Optional real send time, RFC 3339 with an offset (-00:00 is rejected). Must not decrease across messages; ties are allowed. Never invent one from array position.

policiesRequiredBloobabilityV2Policy[]

Independent policies. Probabilities do not sum to one.

Array of BloobabilityV2Policy

idRequiredstring

Unique within the request, echoed unchanged. The model never reads it.

definitionRequiredstring

A natural-language statement that is true or false of the conversation. This is the whole policy: no registration, roster or per-policy calibration.

assessment_timeoptionalstring

Optional "now" for time-relative policies, RFC 3339 with an offset. Never defaulted to the request time, and it does not filter messages.

Returns

tierRequiredstring

The tier that answered: always the one you requested.

"instant""full"
model_versionRequiredstring

Immutable identity of the weights, calibration, tokenizer and runtime that produced these numbers. Compare probabilities only within one version.

policiesRequiredBloobabilityV2PolicyDecision[]

One decision per requested policy, in request order. A request either fully succeeds or errors; no policy is ever dropped.

Array of BloobabilityV2PolicyDecision

idRequiredstring

The policy ID you sent.

probabilityRequirednumber

Calibrated probability that the policy holds for this conversation.

answerableRequirednumber

Calibrated estimate that the conversation contains enough to judge the policy. A number, never a Boolean, and it never alters probability. On instant it is not a reliable missing-information check.

Response codes

200One decision per requested policy, in request order. The example's numbers are illustrative, not measured output.
400The request was malformed — check the path, query parameters, and body.
401Your API key is missing or invalid. Pass it as a bearer token.
403Your API key isn't allowed to access this ai (blocked key or plan limit).
413The request body exceeds 1 MiB.
422The conversation and policies exceed the chosen tier's context (`context_limit_exceeded`). Shorten the thread or send fewer or shorter policies; nothing is truncated.
429The tier's queue is full (`queue_full`, `queue_timeout`). Retry with backoff.
502The model host gave an unexpected answer (`upstream_error`). Retry later. 5xx bodies carry no `details`.
503The model is restarting or unreachable (`model_unavailable`, `upstream_unavailable`): retry with backoff. `inference_timeout` and `gpu_memory_exhausted` mean this request made the model fail and are not worth retrying unchanged: send a shorter conversation or fewer policies. `not_configured` is a fault on our side.
504The model did not answer in time (`upstream_timeout`). Retry with backoff.

Sends a live request with your values and shows the real response below. Your key is stored only in this browser.

Request
curl -X POST https://api.blooio.com/v4/ai/bloobability/v2/decide \
Body object
Response objectexample
{  "tier": "full",  "model_version": "bloobability-v2-full-392ad04431a8",  "policies": [    {      "id": "refund_request",      "probability": 0.94,      "answerable": 0.98    }  ]}