Changelog
Changes to /v1 responses and webhook payloads, newest first. Within /v1, changes are additive: new fields, event types and enum values can appear, so accept values you don’t recognise. See Versioning.
Upcoming
Section titled “Upcoming”Agreed and not yet live. Each moves to a dated entry when it ships.
- Clearer value names.
outcomeescalatedbecomeshanded_to_person,not_real_inquirybecomesnot_customer_call, anddecided_byllm_judgebecomessecond_review. Accept both names until the change is dated here; the SDKs already do. The field nameverdictstays. - JSON errors everywhere. Unknown paths answer
404 not_foundand unsupported methods405 method_not_allowedwith anAllowheader, as JSON. Every error carriesrequest_id, also sent as theMidwater-Request-Idheader. - Listing. Endpoints to list a project’s checks and its conversations, cursor-paginated (
limitandcursorin,dataandnext_cursorout).
October 2026
Section titled “October 2026”- Key prefixes. New API keys start
mw_test_ormw_live_. - Webhook headers. Deliveries carry
Midwater-Signature,Midwater-EventandMidwater-Delivery, with the user agentMidwater-Webhooks/1.0. - Groups.
groupin a conversation files the agent only until someone places it in the app; after that it’s ignored for that agent, and the conversation is still accepted.GET /v1/groups/{group_id}/healthis always available, andgroup.health_changedfires whenever a group’s status changes with Watch or At risk involved. - Low-volume health. Below 5 conversations with an outcome in 7 days, an agent with a high-severity compliance failure is
watch(1) orat_risk(2 or more) instead ofnot_enough_calls, andreasonnames the failure. not_enough_calls. Newhealth_statusvalue on the health endpoints and webhooks: fewer than 5 conversations with an outcome in the last 7 days.agent.health_changedandgroup.health_changedfire only whenwatchorat_riskis the old or new status.- Safe IDs.
agent.idandgroup.idmust match^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$; anything else is a422with a field error. IDs never need URL-encoding. scorer_version. Each result carriesscorer_version, Midwater’s own version of how the result was scored. It changes whenever the scoring changes.- Agents.
POST /v1/conversationstakesagent: { id?, name?, version? }(a newagent.idcreates the agent; without one the conversation goes to the Default agent) andgroup: { id, name? }.GET /v1/conversations/{id}returnsagentandgroup. New endpoints:GET /v1/agents/{agent_id}/healthandGET /v1/groups/{group_id}/health. Webhooks carryagentandgroup, and health events areagent.health_changedandgroup.health_changed. - Health windows. Each window has
handed_to_person_rate(handed to a person: a transfer, or a person requested and provided) andrequests_for_person_not_honored. - Environment on every webhook. Every payload has a top-level
environment,testorlive.