A decision is one named question answered with a calibrated probability. All six are POST /v1/decisions/<name>, take JSON, need the decisions:write scope and return the same envelope. Each is billed only when it returns an answer.
| Decision |
Price per call |
Question |
qualify_firm |
$0.005 |
Is this firm in my ICP? |
score_signal |
$0.005 |
Does this event matter, and is now the time? |
pick_person |
$0.005 |
Who at this firm should I write to? |
triage_reply |
$0.003 |
What does this reply mean? |
right_person |
$0.003 |
Is this the right person to contact? |
should_send |
$0.003 |
Should this message go out now? |
| Your agent is about to… |
Call |
Branch on |
| spend effort on a company |
qualify_firm |
answer: fit or not_fit |
| act on something that happened to a company |
score_signal |
answer, then act_now and window_days |
| choose who at a firm to contact |
pick_person |
people[0], answer: pick or no_pick |
| handle a reply |
triage_reply |
answer: the reply state, or needs_review |
| check one contact before using them |
right_person |
answer: right_person or not_right_person |
| send a prepared message |
should_send |
answer: send or hold, then hold_reason |
Every decision returns these fields, plus a few specific to the decision.
| Field |
Meaning |
id |
The decision id (dec_...). Report outcomes against it. |
decision |
The decision name. |
version |
The API version that answered. |
question_set_version |
The question set that answered. Match it to the eval results. |
p |
Calibrated probability. Always present. |
answer |
p against your threshold. Branch on this. |
reason_code |
Fixed enum per decision (listed on each decision page). |
reason |
A short template sentence. Never free text from a large model. |
evidence |
Sources with URL and date. source is an index slug or request. |
calibration |
basis (org, segment or global), n_outcomes, threshold. |
cost |
decision_usd, vendor_usd, total_usd. |
balance_usd |
Balance after this call. |
latency_ms |
Server time for the call. |
- Idempotency. Send
Idempotency-Key (a UUID). A repeat within 24 hours returns the stored response and bills nothing. Reusing a key with a different body returns 409 idempotency_conflict.
- Spend caps. Send
X-Max-Cost-USD. A call that would cost more is refused with 402 max_cost_exceeded before any spend.
- Misses are free. No answer, an error, or a refused call bills nothing.
- Decision model down. You get 503
decision_unavailable with Retry-After. Retry with the same Idempotency-Key. Nothing is billed.
- Limits. Request bodies up to 256 KB, rosters up to 50 people, threads up to 40 messages of 8 KB each.
- Fetch later.
GET /v1/decisions/{id} returns any past decision, free.