curl --request POST \
--url https://mcp.arlohealth.ai/api/pricing/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"latitude": 123,
"longitude": 123,
"zip": "<string>",
"radiusKm": 123,
"limit": 123,
"planHints": {
"payerName": "<string>",
"employerName": "<string>",
"planName": "<string>",
"groupNumber": "<string>",
"unavailable": true
},
"patientId": "<string>"
}
'import requests
url = "https://mcp.arlohealth.ai/api/pricing/search"
payload = {
"code": "<string>",
"latitude": 123,
"longitude": 123,
"zip": "<string>",
"radiusKm": 123,
"limit": 123,
"planHints": {
"payerName": "<string>",
"employerName": "<string>",
"planName": "<string>",
"groupNumber": "<string>",
"unavailable": True
},
"patientId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
code: '<string>',
latitude: 123,
longitude: 123,
zip: '<string>',
radiusKm: 123,
limit: 123,
planHints: {
payerName: '<string>',
employerName: '<string>',
planName: '<string>',
groupNumber: '<string>',
unavailable: true
},
patientId: '<string>'
})
};
fetch('https://mcp.arlohealth.ai/api/pricing/search', 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/pricing/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'code' => '<string>',
'latitude' => 123,
'longitude' => 123,
'zip' => '<string>',
'radiusKm' => 123,
'limit' => 123,
'planHints' => [
'payerName' => '<string>',
'employerName' => '<string>',
'planName' => '<string>',
'groupNumber' => '<string>',
'unavailable' => true
],
'patientId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mcp.arlohealth.ai/api/pricing/search"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mcp.arlohealth.ai/api/pricing/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.arlohealth.ai/api/pricing/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"disclaimer": "<string>",
"needsMoreInfo": [
{}
],
"plan": {},
"supportedServices": [
{}
]
}{
"error": "<string>",
"needsAuth": true
}{
"error": "<string>",
"agentInstructions": "<string>"
}Search care prices
Nearby in-network care options with estimated negotiated prices under the user’s plan, for about 150 common outpatient services. This is area discovery (“what does this cost around here”), not a clinic directory: for any NAMED clinic, brand, or provider call POST /api/pricing/network-status first, because the same brand bills under different legal entities at very different rates.
The plan resolves from the user’s linked insurance; planHints
sharpen it when the response asks (needsMoreInfo). code is a
catalog CPT/HCPCS code: omit it to receive the catalog as
supportedServices and pick the closest code. Free: never charges the
user and never starts a consultation. Same request and response fields
as the public pricing.v1 API on api.arlohealth.ai. Always relay the
response’s disclaimer; inNetwork: false means “not found in the
published files”, never a hard out-of-network verdict.
curl --request POST \
--url https://mcp.arlohealth.ai/api/pricing/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "<string>",
"latitude": 123,
"longitude": 123,
"zip": "<string>",
"radiusKm": 123,
"limit": 123,
"planHints": {
"payerName": "<string>",
"employerName": "<string>",
"planName": "<string>",
"groupNumber": "<string>",
"unavailable": true
},
"patientId": "<string>"
}
'import requests
url = "https://mcp.arlohealth.ai/api/pricing/search"
payload = {
"code": "<string>",
"latitude": 123,
"longitude": 123,
"zip": "<string>",
"radiusKm": 123,
"limit": 123,
"planHints": {
"payerName": "<string>",
"employerName": "<string>",
"planName": "<string>",
"groupNumber": "<string>",
"unavailable": True
},
"patientId": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
code: '<string>',
latitude: 123,
longitude: 123,
zip: '<string>',
radiusKm: 123,
limit: 123,
planHints: {
payerName: '<string>',
employerName: '<string>',
planName: '<string>',
groupNumber: '<string>',
unavailable: true
},
patientId: '<string>'
})
};
fetch('https://mcp.arlohealth.ai/api/pricing/search', 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/pricing/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'code' => '<string>',
'latitude' => 123,
'longitude' => 123,
'zip' => '<string>',
'radiusKm' => 123,
'limit' => 123,
'planHints' => [
'payerName' => '<string>',
'employerName' => '<string>',
'planName' => '<string>',
'groupNumber' => '<string>',
'unavailable' => true
],
'patientId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://mcp.arlohealth.ai/api/pricing/search"
payload := strings.NewReader("{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://mcp.arlohealth.ai/api/pricing/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://mcp.arlohealth.ai/api/pricing/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"code\": \"<string>\",\n \"latitude\": 123,\n \"longitude\": 123,\n \"zip\": \"<string>\",\n \"radiusKm\": 123,\n \"limit\": 123,\n \"planHints\": {\n \"payerName\": \"<string>\",\n \"employerName\": \"<string>\",\n \"planName\": \"<string>\",\n \"groupNumber\": \"<string>\",\n \"unavailable\": true\n },\n \"patientId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"disclaimer": "<string>",
"needsMoreInfo": [
{}
],
"plan": {},
"supportedServices": [
{}
]
}{
"error": "<string>",
"needsAuth": true
}{
"error": "<string>",
"agentInstructions": "<string>"
}Authorizations
OAuth 2.1 with PKCE
Body
CPT/HCPCS code from the supported catalog. Omit it (or pass an unsupported one) to receive the catalog as supportedServices and pick the closest code.
Preferred when available. Pair with longitude.
5-digit US ZIP when coordinates are unavailable
Search radius in km (default 40)
Max facilities to return (default 25)
Insurance identifiers from the user, used when the response asks for them (needsMoreInfo). The plan otherwise resolves from linked insurance. employerName / planName upgrade range estimates to the exact plan's rates; groupNumber is matched for Blue Cross Blue Shield of IL/TX/OK/NM/MT only. Set unavailable=true when the user cannot provide identifiers, which stops the asks.
Show child attributes
Show child attributes
Family-member patient id exactly as returned by GET /api/profile (defaults to the account holder)
Response
Facilities with estimated rates, or the catalog when no usable code was given
Self-describing. Identical to the public pricing.v1 response for the same route (see the Pricing API reference for every field). Read plan.basis before quoting anything, relay every note-style field as written (any key ending in Note, plus note, rateAssessment, statusNote, disclaimer), and answer needsMoreInfo asks.
Was this page helpful?