curl --request POST \
--url https://api.arlohealth.ai/api/pricing.v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "99213",
"zip": "94607",
"limit": 10,
"planHints": {
"payerName": "Anthem"
}
}
'import requests
url = "https://api.arlohealth.ai/api/pricing.v1/search"
payload = {
"code": "99213",
"zip": "94607",
"limit": 10,
"planHints": { "payerName": "Anthem" }
}
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: '99213', zip: '94607', limit: 10, planHints: {payerName: 'Anthem'}})
};
fetch('https://api.arlohealth.ai/api/pricing.v1/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://api.arlohealth.ai/api/pricing.v1/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' => '99213',
'zip' => '94607',
'limit' => 10,
'planHints' => [
'payerName' => 'Anthem'
]
]),
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://api.arlohealth.ai/api/pricing.v1/search"
payload := strings.NewReader("{\n \"code\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\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://api.arlohealth.ai/api/pricing.v1/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arlohealth.ai/api/pricing.v1/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\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\n}"
response = http.request(request)
puts response.read_body{
"service": {
"code": "<string>",
"name": "<string>",
"category": "<string>",
"appliesTo": "<string>",
"priceNote": "<string>",
"medicareNote": "<string>",
"relatedCodes": [
{
"code": "<string>",
"name": "<string>",
"when": "<string>"
}
]
},
"supportedServices": [
{
"code": "<string>",
"name": "<string>",
"category": "<string>"
}
],
"plan": {
"payer": "<string>",
"payerLabel": "<string>",
"matchTier": "<string>",
"basis": "<string>",
"sponsor": "<string>",
"payerSource": "<string>",
"coverageSelection": {},
"coverageNote": "<string>",
"planHintsReceived": {}
},
"needsMoreInfo": [
{
"field": "<string>",
"ask": "<string>",
"why": "<string>",
"how": "<string>",
"options": [
"<string>"
]
}
],
"geo": {
"source": "<string>"
},
"facilities": [
{
"name": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"latitude": 123,
"longitude": 123,
"locationPrecision": "<string>",
"distanceKm": 123,
"distanceNote": "<string>",
"observedServiceBilling": true,
"activityNote": "<string>",
"providers": [
{
"npi": 123,
"name": "<string>",
"entityType": "<string>",
"inNetwork": true,
"rate": 123,
"rateRange": {
"min": 123,
"max": 123,
"median": 123
},
"rateSampled": true,
"setting": "<string>",
"note": "<string>",
"patientShare": {
"afterDeductible": 123,
"beforeDeductibleMet": 123,
"limitingChargeMax": 123,
"note": "<string>"
},
"medicareStatus": {
"enrolled": true,
"assignment": "<string>",
"optedOut": true,
"basis": "<string>"
},
"statusNote": "<string>",
"typicalRate": 123,
"rateAssessment": "<string>",
"serviceEvidence": "<string>",
"serviceAvailabilityNote": "<string>",
"telehealthEligible": true,
"confidence": "<string>",
"billingOrg": "<string>",
"multiEntity": true,
"multiEntityNote": "<string>",
"signals": [
{
"type": "<string>",
"display": "<string>",
"hcpcs": "<string>",
"floor": 123,
"pctl": 123,
"level": "<string>",
"facility": "<string>",
"measure": "<string>",
"score": 123,
"ci": [
123
],
"verdict": "<string>",
"denominator": 123
}
],
"medicareAnchor": {
"source": "<string>",
"medicareAllowed": 123,
"rateRatio": 123,
"year": 123,
"setting": "<string>"
}
}
]
}
],
"totalFound": 123,
"medicare": {
"coverage": "<string>",
"assumed": true,
"year": 123,
"partBDeductible": 123,
"coinsurancePct": 123,
"limitingChargePct": 123,
"medigap": true,
"note": "<string>"
},
"rateFetchNote": "<string>",
"sortBasis": "<string>",
"signalDefinitions": {},
"methodology": "<string>",
"disclaimer": "<string>",
"dataVintage": "<string>"
}{
"error": "<string>",
"message": "<string>",
"retryAfterSeconds": 123
}{
"error": "<string>",
"message": "<string>",
"retryAfterSeconds": 123
}Nearby in-network options with estimated negotiated prices for one service
Area discovery: what does this service cost around here. NOT a clinic directory. The moment the patient names a specific clinic, brand, or provider, use network-status instead. Anonymous limit: 60 requests per minute per IP.
curl --request POST \
--url https://api.arlohealth.ai/api/pricing.v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"code": "99213",
"zip": "94607",
"limit": 10,
"planHints": {
"payerName": "Anthem"
}
}
'import requests
url = "https://api.arlohealth.ai/api/pricing.v1/search"
payload = {
"code": "99213",
"zip": "94607",
"limit": 10,
"planHints": { "payerName": "Anthem" }
}
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: '99213', zip: '94607', limit: 10, planHints: {payerName: 'Anthem'}})
};
fetch('https://api.arlohealth.ai/api/pricing.v1/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://api.arlohealth.ai/api/pricing.v1/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' => '99213',
'zip' => '94607',
'limit' => 10,
'planHints' => [
'payerName' => 'Anthem'
]
]),
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://api.arlohealth.ai/api/pricing.v1/search"
payload := strings.NewReader("{\n \"code\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\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://api.arlohealth.ai/api/pricing.v1/search")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"code\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arlohealth.ai/api/pricing.v1/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\": \"99213\",\n \"zip\": \"94607\",\n \"limit\": 10,\n \"planHints\": {\n \"payerName\": \"Anthem\"\n }\n}"
response = http.request(request)
puts response.read_body{
"service": {
"code": "<string>",
"name": "<string>",
"category": "<string>",
"appliesTo": "<string>",
"priceNote": "<string>",
"medicareNote": "<string>",
"relatedCodes": [
{
"code": "<string>",
"name": "<string>",
"when": "<string>"
}
]
},
"supportedServices": [
{
"code": "<string>",
"name": "<string>",
"category": "<string>"
}
],
"plan": {
"payer": "<string>",
"payerLabel": "<string>",
"matchTier": "<string>",
"basis": "<string>",
"sponsor": "<string>",
"payerSource": "<string>",
"coverageSelection": {},
"coverageNote": "<string>",
"planHintsReceived": {}
},
"needsMoreInfo": [
{
"field": "<string>",
"ask": "<string>",
"why": "<string>",
"how": "<string>",
"options": [
"<string>"
]
}
],
"geo": {
"source": "<string>"
},
"facilities": [
{
"name": "<string>",
"address": "<string>",
"city": "<string>",
"state": "<string>",
"zip": "<string>",
"latitude": 123,
"longitude": 123,
"locationPrecision": "<string>",
"distanceKm": 123,
"distanceNote": "<string>",
"observedServiceBilling": true,
"activityNote": "<string>",
"providers": [
{
"npi": 123,
"name": "<string>",
"entityType": "<string>",
"inNetwork": true,
"rate": 123,
"rateRange": {
"min": 123,
"max": 123,
"median": 123
},
"rateSampled": true,
"setting": "<string>",
"note": "<string>",
"patientShare": {
"afterDeductible": 123,
"beforeDeductibleMet": 123,
"limitingChargeMax": 123,
"note": "<string>"
},
"medicareStatus": {
"enrolled": true,
"assignment": "<string>",
"optedOut": true,
"basis": "<string>"
},
"statusNote": "<string>",
"typicalRate": 123,
"rateAssessment": "<string>",
"serviceEvidence": "<string>",
"serviceAvailabilityNote": "<string>",
"telehealthEligible": true,
"confidence": "<string>",
"billingOrg": "<string>",
"multiEntity": true,
"multiEntityNote": "<string>",
"signals": [
{
"type": "<string>",
"display": "<string>",
"hcpcs": "<string>",
"floor": 123,
"pctl": 123,
"level": "<string>",
"facility": "<string>",
"measure": "<string>",
"score": 123,
"ci": [
123
],
"verdict": "<string>",
"denominator": 123
}
],
"medicareAnchor": {
"source": "<string>",
"medicareAllowed": 123,
"rateRatio": 123,
"year": 123,
"setting": "<string>"
}
}
]
}
],
"totalFound": 123,
"medicare": {
"coverage": "<string>",
"assumed": true,
"year": 123,
"partBDeductible": 123,
"coinsurancePct": 123,
"limitingChargePct": 123,
"medigap": true,
"note": "<string>"
},
"rateFetchNote": "<string>",
"sortBasis": "<string>",
"signalDefinitions": {},
"methodology": "<string>",
"disclaimer": "<string>",
"dataVintage": "<string>"
}{
"error": "<string>",
"message": "<string>",
"retryAfterSeconds": 123
}{
"error": "<string>",
"message": "<string>",
"retryAfterSeconds": 123
}Authorizations
Optional. An Arlo account token adds linked-coverage plan matching and family-member patientId. Anonymous calls resolve the plan from planHints only.
Body
Area discovery: what does this service cost around here. NOT a clinic directory. The moment the patient names a specific clinic, brand, or provider, use network-status instead.
CPT/HCPCS code from the supported catalog (GET /api/pricing.v1/catalog). There is no free-text service input: the caller selects the code, because codes carry patient facts the server cannot infer (screening vs diagnostic intent, age band, new vs established patient, body part, contrast, duration). An unknown code returns 200 with needsMoreInfo plus the full supportedServices catalog.
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). Also widens the fetched provider pool (up to 80 providers).
Insurance identifiers from the patient. For anonymous calls this is the ONLY plan input: pass at least payerName (see GET /api/pricing.v1/payers for accepted names). employerName / planName upgrade range estimates to the exact plan's rates when they match a published plan; Group # is only matched for Blue Cross Blue Shield of IL/TX/OK/NM/MT (HCSC). Original Medicare needs no other identifier. Set unavailable=true when the patient cannot provide identifiers, which suppresses further asks and keeps range-based estimates.
Show child attributes
Show child attributes
Family-member patient id on the caller's account. Authenticated calls only: anonymous calls that pass it receive a needsMoreInfo 'auth' ask.
Response
Search results. Also 200 with needsMoreInfo when the code, location, or insurer could not be resolved.
Echo of the resolved service. VERIFY appliesTo against the actual patient before relaying any number.
Show child attributes
Show child attributes
Full pricing catalog, returned when the service could not be resolved. Pick the right code and re-call.
Show child attributes
Show child attributes
What the estimate is based on. Always read matchTier and basis before relaying numbers.
Show child attributes
Show child attributes
Asks to relay to the patient. Answering them improves the estimate (ranges become the plan's exact rates). Each ask names the field, why it matters, and how to obtain it. A medicare_type ask means the numbers assume Original Medicare and the person must confirm they are not on a Medicare Advantage plan.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Places of care, best rate first. Each groups the billing NPIs at one street address. Present results place-first (facility name or address) with the providers inside.
Show child attributes
Show child attributes
Eligible in-network providers for this service in the search area. facilities is the nearest subset with usable rates.
Present on Original Medicare responses. The year's Part B deductible, coinsurance, and limiting charge, whether a Medigap supplement was mentioned, and assumed=true when the person said only "Medicare" (confirm it is not an Advantage plan; the medicare_type ask says how). Relay the note once.
Show child attributes
Show child attributes
Present when the response is bounded: schedules were sampled evenly (rateSampled=true on affected rows) and/or results cover only the nearest subset of a much larger eligible pool. Relay it: the page is the nearest options, not the area's full price picture.
The ordering contract: price within evidence tiers (places with observed billing first, each tier cheapest-first). A cheaper unconfirmed option can sit below confirmed performers; say so when relaying order.
Once-per-response legend explaining each signal type.
Path to the methodology page.
ALWAYS convey to the patient: estimates come from the insurer's published data and are not a price guarantee.
Was this page helpful?