curl --request GET \
--url https://mcp.arlohealth.ai/api/consultations/{id}/reply \
--header 'Authorization: Bearer <token>'import requests
url = "https://mcp.arlohealth.ai/api/consultations/{id}/reply"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://mcp.arlohealth.ai/api/consultations/{id}/reply', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mcp.arlohealth.ai/api/consultations/{id}/reply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mcp.arlohealth.ai/api/consultations/{id}/reply"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mcp.arlohealth.ai/api/consultations/{id}/reply")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.arlohealth.ai/api/consultations/{id}/reply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"conversationId": "<string>",
"status": "<unknown>",
"reply": {
"from": "ai",
"type": "<string>",
"text": "<string>",
"messageId": "<string>",
"fileName": "<string>",
"prescriptionOrderId": "<string>",
"timestamp": "<string>"
},
"replies": [
{
"from": "ai",
"type": "<string>",
"text": "<string>",
"messageId": "<string>",
"fileName": "<string>",
"prescriptionOrderId": "<string>",
"timestamp": "<string>"
}
],
"stillWaiting": true,
"waitedSeconds": 123,
"connected": true,
"note": "<string>",
"nextStep": "<string>",
"nextStepArgs": {}
}{
"error": "<string>",
"reason": "<string>",
"code": "<string>"
}{
"error": "<string>",
"needsAuth": true
}Wait for Reply
Blocks until the next reply lands in the conversation (an AI triage reply, a provider connecting, or a provider message) and returns it, instead of polling GET /api/consultations/. The REST form of the wait_for_reply tool.
Resumable: when nothing arrives inside the window the response is
stillWaiting: true; call again with the same parameters. Pass the
last reply’s messageId as afterMessageId to await what comes after
it. In IDLE or PAYMENT_REQUIRED there is nothing to wait for and the
response says so with a nextStep.
curl --request GET \
--url https://mcp.arlohealth.ai/api/consultations/{id}/reply \
--header 'Authorization: Bearer <token>'import requests
url = "https://mcp.arlohealth.ai/api/consultations/{id}/reply"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://mcp.arlohealth.ai/api/consultations/{id}/reply', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://mcp.arlohealth.ai/api/consultations/{id}/reply",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://mcp.arlohealth.ai/api/consultations/{id}/reply"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://mcp.arlohealth.ai/api/consultations/{id}/reply")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.arlohealth.ai/api/consultations/{id}/reply")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"conversationId": "<string>",
"status": "<unknown>",
"reply": {
"from": "ai",
"type": "<string>",
"text": "<string>",
"messageId": "<string>",
"fileName": "<string>",
"prescriptionOrderId": "<string>",
"timestamp": "<string>"
},
"replies": [
{
"from": "ai",
"type": "<string>",
"text": "<string>",
"messageId": "<string>",
"fileName": "<string>",
"prescriptionOrderId": "<string>",
"timestamp": "<string>"
}
],
"stillWaiting": true,
"waitedSeconds": 123,
"connected": true,
"note": "<string>",
"nextStep": "<string>",
"nextStepArgs": {}
}{
"error": "<string>",
"reason": "<string>",
"code": "<string>"
}{
"error": "<string>",
"needsAuth": true
}Authorizations
OAuth 2.1 with PKCE
Path Parameters
Consultation/conversation ID
Query Parameters
Await the reply after this message (the last one you have seen)
How long one call may block. Defaults to 55 so a plain HTTP client's 60-second timeout is never hit; clamped to 300.
5 <= x <= 300Response
The next reply, several pending replies, or stillWaiting
One of: a single reply, several pending replies, stillWaiting (resume
with the same call), connected (a provider joined), or a note that
the conversation has nothing pending to wait for.
A single inbound message or visit event.
Show child attributes
Show child attributes
Several replies had already arrived. Relay them in order, then call again with afterMessageId set to the LAST reply's messageId.
Show child attributes
Show child attributes
True when nothing arrived within the window. Call again with the same parameters to resume; no duplicate side effects.
With stillWaiting, how long this call blocked.
True when a provider joined while waiting. Fetch the conversation, then message the provider.
Why there was nothing to wait for (IDLE, PAYMENT_REQUIRED, EMERGENCY).
Was this page helpful?