triage_reply
What does this reply mean? POST /v1/decisions/triage_reply. $0.003 per answer. Scope decisions:write.
When to call
Section titled “When to call”Call it on every inbound reply before your agent answers, books, stops or escalates. Send the thread (up to 40 messages, 8 KB each), oldest first. Text in the thread passes an injection guard before it reaches the model, so a reply that says “ignore your instructions” is treated as text, not as an instruction.
Inputs
Section titled “Inputs”| Field | Type | Required | Description |
|---|---|---|---|
thread |
array of ThreadMessage | yes | The thread, oldest first, 1 to 40 messages; the last is the reply to triage. |
thread[].role |
enum: “sender”, “prospect”, “system” | yes | Who wrote the message. |
thread[].text |
string | yes | Plain-text body of the message. At most 8192 bytes of UTF-8. |
thread[].sent_at |
string (date-time) | yes | When the message was sent. |
context |
object | no | Optional context. |
context.decision_id |
string | no | The decision behind the original send. |
context.notes |
string | no | Short notes on what was offered. At most 2000 bytes of UTF-8. |
icp_id |
string | no | Optional ICP profile, for calibration by segment. |
icp_id is optional. Without it the call is calibrated on your org’s map, or the global map, and thresholded at your triage_reply threshold, else 0.5. Pass context.decision_id to link the triage to the decision behind the original send.
Outputs
Section titled “Outputs”The common envelope plus:
state: the most likely state.next_action: what to do next.answer: thestatewhenpclears your threshold, elseneeds_review. Sendneeds_reviewto a human.
States
Section titled “States”state |
Meaning |
|---|---|
interested |
The prospect is interested. |
meeting_requested |
The prospect asked for or accepted a meeting. |
question |
The prospect asked a question. |
objection_price |
The prospect objected on price. |
objection_timing |
The prospect objected on timing (not now). |
objection_fit |
The prospect objected on fit (not for us). |
not_decision_maker |
The recipient says they are not the decision maker. |
referral |
The recipient referred the sender to someone else. |
out_of_office |
An out-of-office or vacation auto-reply. |
unsubscribe |
The prospect asked not to be contacted again. |
bounce |
The message was not delivered. |
wrong_person |
The recipient is the wrong person (wrong role or wrong firm). |
other |
None of the above. |
Next actions
Section titled “Next actions”next_action |
Meaning |
|---|---|
reply |
Write a reply that continues the conversation. |
book_meeting |
Propose times or send a booking link. |
answer_question |
Answer the prospect’s question. |
handle_objection |
Address the price, timing or fit objection. |
forward_to_referral |
Contact the person the prospect referred you to. |
find_other_contact |
Pick another person at the firm (for example with pick_person). |
retry_later |
Wait and follow up after the stated return date or timing. |
unsubscribe |
Add the address to the suppression list. |
stop |
Stop the sequence for this contact (for example after a bounce). |
escalate_to_human |
Hand the thread to a human; the agent should not act alone. |
none |
No action is needed. |
Reason codes
Section titled “Reason codes”reason_code |
Meaning |
|---|---|
explicit_positive_intent |
The reply states interest in the offer in so many words. |
explicit_meeting_request |
The reply asks for or proposes a meeting time. |
explicit_question |
The reply asks a question that needs an answer before it can progress. |
explicit_objection |
The reply raises a price, timing or fit objection. |
explicit_opt_out |
The reply asks not to be contacted again. |
redirect_to_other_person |
The reply points to someone else or says the recipient is not the right person. |
auto_reply_detected |
The reply is an automatic message (out of office, vacation, auto-acknowledgement). |
delivery_failure_detected |
The reply is a delivery-failure notice (bounce). |
ambiguous_reply |
The reply’s intent cannot be read with confidence. |
thread_too_short |
The thread carries too little context to classify with confidence. |
$0.003 when an answer is returned. Errors bill nothing.
Example
Section titled “Example”curl -X POST 'https://api.askverdict.io/v1/decisions/triage_reply' \ -H "Authorization: Bearer $VERDICT_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H 'Content-Type: application/json' \ -d '{ "thread": [ { "role": "sender", "text": "Hi Dana, saw your Form D last week. Worth a 15-minute call on trade ops?", "sent_at": "2026-11-05T13:00:00Z" }, { "role": "prospect", "text": "Possibly. Can you send pricing first? Next week is better for a call.", "sent_at": "2026-11-06T09:12:00Z" } ], "context": { "decision_id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V" }}'{ "id": "dec_01JC3Z4Y8R9K2M5N7P1Q3S5T7V", "version": "2026-11-01", "question_set_version": "2026-11-01", "model": "jev", "calibration": { "basis": "org", "n_outcomes": 412, "threshold": 0.6 }, "latency_ms": 180, "created_at": "2026-11-07T14:03:00Z", "decision": "triage_reply", "p": 0.71, "answer": "question", "reason_code": "explicit_question", "reason": "The prospect asks for pricing before agreeing to a call.", "evidence": [ { "source": "request", "url": null, "observed_at": "2026-11-06", "pointer": "/thread/1" } ], "state": "question", "next_action": "answer_question", "cost": { "decision_usd": 0.003, "vendor_usd": 0, "total_usd": 0.003 }, "balance_usd": 18.307}