curl --request GET \
--url https://api.glasser.ai/v1/solutions/gtm/market_data/result \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.glasser.ai/v1/solutions/gtm/market_data/result"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.glasser.ai/v1/solutions/gtm/market_data/result', 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.glasser.ai/v1/solutions/gtm/market_data/result",
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://api.glasser.ai/v1/solutions/gtm/market_data/result"
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://api.glasser.ai/v1/solutions/gtm/market_data/result")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.glasser.ai/v1/solutions/gtm/market_data/result")
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{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"address": "<string>",
"property_type": "<string>",
"bedrooms": 123,
"bathrooms": 123,
"living_area_sqft": 123,
"lot_size_sqft": 123,
"year_built": 123,
"latitude": 123,
"longitude": 123,
"estimated_value_usd": 123,
"value_low_usd": 123,
"value_high_usd": 123,
"comparables_count": 123
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "property_value",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"error": {
"code": "validation_failed",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "forbidden",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "not_found",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "rate_limited",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}Read a market data result
Read normalized output, delivery status, and total charges for an existing market data request. Follow the result_url returned by the call.
curl --request GET \
--url https://api.glasser.ai/v1/solutions/gtm/market_data/result \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.glasser.ai/v1/solutions/gtm/market_data/result"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.glasser.ai/v1/solutions/gtm/market_data/result', 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.glasser.ai/v1/solutions/gtm/market_data/result",
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://api.glasser.ai/v1/solutions/gtm/market_data/result"
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://api.glasser.ai/v1/solutions/gtm/market_data/result")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.glasser.ai/v1/solutions/gtm/market_data/result")
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{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {},
"output": {
"address": "<string>",
"property_type": "<string>",
"bedrooms": 123,
"bathrooms": 123,
"living_area_sqft": 123,
"lot_size_sqft": 123,
"year_built": 123,
"latitude": 123,
"longitude": 123,
"estimated_value_usd": 123,
"value_low_usd": 123,
"value_high_usd": 123,
"comparables_count": 123
},
"provider_response": {
"http_status": 349,
"error": null
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {},
"action": "property_value",
"result_status": "success",
"error": {
"code": "<string>",
"message": "<string>"
},
"runs": [
{
"id": "<string>",
"run_url": "<string>",
"provider": "<string>",
"endpoint": "<string>",
"endpoint_version": 123,
"status": "QUEUED",
"failure": {
"kind": "TIMED_OUT",
"message": "<string>"
},
"input": {
"omitted": true
},
"output": {
"omitted": true
},
"provider_response": {
"http_status": 349
},
"charge_usd": "<string>",
"charge_basis": {
"clause": "rule",
"quantity": 1
},
"stoppable": true,
"stop_requested_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"completed_at": "2023-11-07T05:31:56Z",
"task_id": "<string>",
"metadata": {}
}
],
"result_url": "<string>"
}{
"error": {
"code": "validation_failed",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "forbidden",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "not_found",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}{
"error": {
"code": "rate_limited",
"message": "<string>",
"reason": "<string>",
"control": "<string>",
"retry_after_ms": 123,
"details": {}
},
"request_id": "<string>"
}result_url unchanged on the API origin and authenticate with a Key permitted to read every Run. The response uses the same fields as the initial Solution response. HTTP 200 can still carry result_status: pending; keep polling until status is terminal. This read creates no Runs, calls no Providers and does not resume fallback.Query Parameters
Opaque result context returned in result_url. Keep it unchanged and authenticate with a Key permitted to read every listed Run.
1 - 16384Response
MarketDataResult
Open this Run in the console. Requires Workspace membership.
^[a-z0-9][a-z0-9-]*$^\/.+$QUEUED or RUNNING: still in progress. COMPLETED: a Provider response is available, including non-2xx responses. FAILED: read failure. STOPPED: stopped before dispatch. Read charge_usd separately from status.
QUEUED, RUNNING, COMPLETED, FAILED, STOPPED Why the Run failed. Non-null only when status is FAILED.
Show child attributes
Show child attributes
Normalized fields per action. The Provider's native output is not repeated here; it stays on the Run (GET /v1/runs/:id). Values a Provider does not report are null; an empty answer keeps the action's shape with every field null (or items: []) and result_status no_result. Money is USD unless the action carries a currency field. Dates named *_date are YYYY-MM-DD, *_at are ISO 8601 UTC, and *_text is display text exactly as returned.
- property_value: address, property_type, bedrooms, bathrooms, living_area_sqft (living area), lot_size_sqft, year_built, latitude, longitude, estimated_value_usd, value_low_usd, value_high_usd, comparables_count (number of comparable sales behind the estimate)
- property_rent: address, property_type, bedrooms, bathrooms, living_area_sqft (living area), lot_size_sqft, year_built, latitude, longitude, estimated_rent_usd (monthly), rent_low_usd, rent_high_usd, comparables_count (number of comparable rentals behind the estimate)
- property_search: items[]: property_id, address, property_type, bedrooms, bathrooms, living_area_sqft (living area), lot_size_sqft, year_built, latitude, longitude, last_sale_price_usd, last_sale_date (YYYY-MM-DD), owner_names[], owner_type, owner_mailing_address, owner_occupied
- listings_sale: items[]: listing_id, address, property_type, bedrooms, bathrooms, living_area_sqft (living area), lot_size_sqft, year_built, latitude, longitude, status, listing_type, listed_date (YYYY-MM-DD), days_on_market, hoa_fee_usd (monthly HOA fee), mls_name, mls_number, agent {name, phone, email, website}, office {name, phone, email, website}, price_usd (asking price)
- listings_rental: items[]: listing_id, address, property_type, bedrooms, bathrooms, living_area_sqft (living area), lot_size_sqft, year_built, latitude, longitude, status, listing_type, listed_date (YYYY-MM-DD), days_on_market, hoa_fee_usd (monthly HOA fee), mls_name, mls_number, agent {name, phone, email, website}, office {name, phone, email, website}, monthly_rent_usd
- market_stats: zip, updated_at (ISO 8601 UTC, when RentCast last refreshed the aggregate), sale {average_price_usd, median_price_usd, average_price_per_sqft_usd, median_price_per_sqft_usd, average_days_on_market, median_days_on_market, total_listings, new_listings}, rental {average_rent_usd, median_rent_usd, average_rent_per_sqft_usd, median_rent_per_sqft_usd (monthly rent), average_days_on_market, median_days_on_market, total_listings, new_listings}
- stock_quote: symbol, name, exchange, currency, price (regular-session last price, in currency; Google Finance quotes may be delayed), change (absolute, in currency, vs the previous regular close), change_percent (percent points vs the previous regular close: 1.5 = 1.5%), extended_hours_session (the session label as shown, e.g. Pre-market or After hours; null during regular hours), extended_hours_price, extended_hours_change and extended_hours_change_percent (the extended-hours quote vs the regular-session price, same units), as_of_text (the Google Finance page timestamp exactly as shown, not ISO and not the time of price)
- Option 1
- Option 2
- Option 3
- Option 4
- Option 5
- Option 6
- Option 7
Show child attributes
Show child attributes
Non-null only when status is COMPLETED.
- For 2xx responses, output contains Provider-native JSON (any shape), or null for an empty body.
- For non-2xx responses, error contains the Provider's error body and output is null.
Sensitive fields are removed from both bodies.
Show child attributes
Show child attributes
Total charge of runs in this Solution response. Null until all listed Runs settle. Each Run retains its own charge; failures can also be charged.
^(0|[1-9]\d*)\.(\d{2}|\d{2}\d{0,3}[1-9])$Single-Run charge basis, or null for a multi-Run total. Read runs[].charge_basis for each charge.
Show child attributes
Show child attributes
Whether a stop request can currently be accepted. This does not guarantee that the Run can stop before dispatch.
When a stop was requested. The Run can still continue if dispatch had already started.
ISO-8601 UTC timestamp
ISO-8601 UTC timestamp
ISO-8601 UTC timestamp
Your stored tracking fields. Use them to filter Runs. They never go to the Provider or affect routing, Price, or idempotency.
- Up to 20 keys: lowercase letters, digits, and underscores; start with a letter; at most 40 characters.
- Values: strings of 1–500 characters.
- user_id: your End user's opaque ID, never their email address or name.
Show child attributes
Show child attributes
property_value, property_rent, property_search, listings_sale, listings_rental, market_stats, stock_quote Business delivery status, independent of the final Run lifecycle in status. no_result is an empty but valid answer; error means the Provider output could not be delivered.
success, no_result, error, pending Show child attributes
Show child attributes
Show child attributes
Show child attributes
Authenticated, read-only URL path for polling this normalized result and total charge. Use with the API origin. Does not create Runs or resume fallback. GET /v1/runs/:id still returns the native, individual Run.