Skip to content

triage_reply

What does this reply mean? POST /v1/decisions/triage_reply. $0.003 per answer. Scope decisions:write.

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.

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.

The common envelope plus:

  • state: the most likely state.
  • next_action: what to do next.
  • answer: the state when p clears your threshold, else needs_review. Send needs_review to a human.
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_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_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.

Request
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"
}
}'
Response 200
{
"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
}