Skip to main content

Manual Review

Manual review is Nexa's escape hatch. When automation cannot resolve a case, a review item is created with everything an operator needs to decide — including recommendations from the exception agent.

Categories

CategoryPriorityWhat happened
ALLOCATION_FAILEDHIGHNo policy-compliant hotels available
BOOKING_FAILEDHIGHEvery attempted hotel refused or errored
PAYMENT_FAILEDMEDIUMPSP rejected the card / token
PARTIAL_FULFILLMENTMEDIUMSome groups booked, others failed
POLICY_VIOLATIONLOWNo policy matched the case context
MIXED_TIER_GROUPLOWA group's passengers span multiple tiers
DATA_INCOMPLETELOWManifest missing required fields

Review item shape

{
"urn": "urn:nexa:review:abc",
"caseUrn": "urn:nexa:case:xyz",
"category": "BOOKING_FAILED",
"priority": "HIGH",
"attemptedHotels": [
{ "hotelUrn": "...", "reason": "hotel-full", "providerError": "..." },
{ "hotelUrn": "...", "reason": "payment-refused" }
],
"affectedGroups": ["GRP-3", "GRP-5"],
"recommendations": [
{ "action": "rebook", "hotelUrn": "...", "reason": "policy-compliant, 18km", "source": "agent" },
{ "action": "relaxPolicy","fields": ["maxDistanceKm"], "value": 40, "source": "agent" }
],
"state": "OPEN",
"assignedTo": "urn:nexa:user:opsA"
}

Operator workflow

1. Claim

Claiming an item prevents two operators from working on the same thing:

curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/claim \
-H "Authorization: Bearer $TOKEN"

2. Review the context

Everything lives on the item:

  • What was attempted
  • Why each attempt failed (provider error, policy gate, payment refusal)
  • The agent's top 3 recommendations, ranked by viability
  • Links to the relevant case, wave, and reservations

3. Act

The item exposes the safe actions:

# Re-book against a specific hotel
curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/rebook \
-H "Authorization: Bearer $TOKEN" \
-d '{ "hotelUrn": "urn:nexa:hotel:alt", "reason": "agent rec #1" }'

# Relax policy for this case only
curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/relax \
-H "Authorization: Bearer $TOKEN" \
-d '{ "fields": { "maxDistanceKm": 40 }, "reason": "airport hotels all booked" }'

# Split a mixed-tier group
curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/split \
-H "Authorization: Bearer $TOKEN" \
-d '{ "into": [["PAX-1"], ["PAX-2","PAX-3"]], "reason": "accessibility" }'

# Override with manual booking
curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/override \
-H "Authorization: Bearer $TOKEN" \
-d '{
"hotelUrn": "urn:nexa:hotel:abc",
"providerOfferId": "...",
"reason": "front-desk phone confirmation"
}'

4. Resolve

curl -X POST https://us-central1.api.nexastudio.io/manual-review/$ITEM_URN/resolve \
-H "Authorization: Bearer $TOKEN" \
-d '{ "resolution": "REBOOKED", "reason": "booked backup hotel via agent rec" }'

The item is closed, the case transitions back into the normal flow, and the audit log captures the actor + reason.

The exception agent's role

When a review item is created, the Nexa Exception Agent — a Nexa Trained Model on Google, enabled per-tenant — is invoked to produce recommendations. It operates via an allow-list of tools — it can:

  • Search alternate hotels (within and outside the current policy).
  • Calculate the cost of a proposed policy relaxation.
  • Classify the failure cause.

It cannot directly book, cancel, or send notifications. Every recommendation is a proposal the human approves. See Exception agent.

SLA and escalation

Manual review items carry a priority. Each tenant can configure SLAs per priority (for example: HIGH → 15 min, MEDIUM → 1 h, LOW → 4 h). Breached SLAs:

  • Page the on-call via the tenant's configured alerting channel.
  • Escalate priority one level.
  • Append an audit entry.

Post-mortem

Closed items contribute to weekly ops reports:

  • Breakdown by category
  • Mean time to resolve
  • % resolved by agent recommendation acceptance
  • Top failing policies and providers

Use this to tune policies, provider weights, and agent prompts.

Was this helpful?