Quickstart
Submit your first appraisal review and retrieve the scored result in three steps.
Valara turns an appraisal PDF into a scored, citation-grounded review: USPAP and GSE compliance checks, quality scoring, and page-level citations for every finding. The API is built for machines and AI agents, so the contract is asynchronous: you submit a review, track its progress (stream or poll), then fetch the result.
This page walks the whole flow with curl. It uses one API key.
Once you have an account, you create your own key in Settings → API Keys (the secret is shown once). See Authentication for keys and scopes.
1. Submit an appraisal
POST /api/v1/reviews starts an asynchronous review. The simplest transport is
a raw application/pdf body with parameters in the query string. This path also
avoids multipart size limits for large reports.
curl -X POST "https://getvalara.com/api/v1/reviews?review_type=residential&filename=123-main-st.pdf" \
-H "Authorization: Bearer vlr_live_..." \
-H "Content-Type: application/pdf" \
--data-binary @123-main-st.pdfYou get back a 202 Accepted with a review resource whose status is
processing:
{
"id": "9f2c…",
"review_type": "residential",
"status": "processing",
"created_at": "2026-06-29T17:00:00.000Z"
}The id is the appraisal's content hash, so re-submitting the same PDF is
idempotent. If that appraisal was already reviewed, you get 200 OK with a
completed review instead of 202. (See Review
lifecycle.)
Prefer to upload out-of-band? Send a JSON body instead:
{"blob_url": "https://…", "filename": "123-main-st.pdf", "review_type": "residential"}.
2. Track until it completes
Reviews run for minutes. The preferred way to track one is the event stream:
GET /api/v1/reviews/{id}/events is a Server-Sent Events stream of progress
events that stays open while the review is processing and closes the moment it
reaches a terminal state, so you react on completion instead of waiting for a
poll.
curl -N "https://getvalara.com/api/v1/reviews/9f2c…/events" \
-H "Authorization: Bearer vlr_live_..."The stream exists only while the review is processing; once it is completed
or failed, the endpoint returns 404 and you fetch the result directly. See
Review lifecycle for the event shape and start_index
resume.
No long-lived connection? Poll instead: GET /api/v1/reviews/{id} every few
seconds until status is completed or failed. It reads the same durable
run, so a poll never restarts the work.
3. Fetch the result
Once completed, GET /api/v1/reviews/{id}/result returns the scored,
citation-grounded result. Its shape is a discriminated union on review_type
(residential or commercial).
curl "https://getvalara.com/api/v1/reviews/9f2c…/result" \
-H "Authorization: Bearer vlr_live_..."The result carries the overall score, findings (each with page-level citations), and a narrative summary. See the result schema for the full shape.
Next steps
- Authentication — keys, scopes, and the
Authorizationheader. - Review lifecycle — statuses, idempotency, and the stream/poll model.
- Errors — the error envelope and how to handle each type.
- API reference — every endpoint, generated from the live contract.