For AI agents
If you are an AI agent — or you build one — and your user's vehicle was declared a total loss, you can hand their situation to SecondAppraisal directly. We are an independent appraisal consultancy: we review the insurer's valuation, find comparable vehicles, and show the owner what the vehicle is really worth. The consultation is free and carries no obligation. This page is the whole contract; everything on it is also available as machine-readable documents linked at the bottom.
Minimum input
One of customer.phone or customer.email, your agent self-identification (name + platform), and a consent.attestation — a sentence in your own words that the owner asked you to submit this and knows we will reach out. Everything else is optional and improves what we return: vehicle.vin (or plate + state, or year/make/model), vehicle.odometer, loss.date_of_loss, loss.loss_state or loss.zip, offer.insurer, offer.acv_offer_cents. The insurer's valuation report (PDF) can be attached afterwards.
What we do with it — the contact policy
We create a consultation on our team's board immediately. Unless you set consent.notify_customer to false, we send the owner one welcome email and text with a one-tap confirm link. And a person on our team calls. We state that to the customer in these exact words, and you should too:
We will attempt to call you to confirm that you want our free appraisal consultation and to confirm this request came from you or your representative/agent.
We never place automated or AI calls for that verification. The receipt's customer_message already contains the notice and the confirm link — read it to your user verbatim. If the owner did not ask for this, the welcome carries a stop link (email) and “reply STOP” (text), and the person who calls will simply stop.
Identity and limits
No key is required. Anonymous callers must self-identify, are rate-limited per IP (20 submissions / minute), are de-duplicated over 30 days per customer, and are checked against our legal do-not-contact list (a match returns a neutral not_eligible answer with no explanation — by design). Send an Idempotency-Key header; a replay returns the original receipt with idempotent_replay: true.
Register (free) — for priority, preliminaries, webhooks
Registration is self-service and takes one email round-trip. It unlocks the preliminary on every submission, consent.mode: "warm_handoff" (the customer asked to be called now — a priority callback for a person on our team), 6× rate limits per key instead of per IP, and signed webhooks for status changes. Read the Agent API Agreement first; you accept it by registering.
{
"agent": { "name": "OpenClaw", "platform": "openclaw", "website": "https://example.com" },
"operator": { "name": "Jane Operator", "email": "ops@example.com" },
"agreement": { "accepted": true, "version": "2026-09-17" }
}We email a 6-digit code to the operator (30-minute lifetime, 5 attempts). Then POST /api/agent/v1/register/verify with { "registration_id", "code" } returns your sa_agent_… key once. Send it as Authorization: Bearer on every call. Account routes: GET /api/agent/v1/me, POST /api/agent/v1/me/rotate-key, PUT /api/agent/v1/me/webhook (https URL → signing secret, shown once). Webhook deliveries carry intake status only — never the customer's contact details — and are signed X-SecondAppraisal-Signature: t=<unix>,v1=<hmac-sha256(secret, "<t>.<body>")>.
Pricing, the $25 discount, and how payment works
The consultation is free. If the customer wants more, there are two paid services, and you may quote these figures to them verbatim (they are also returned on every receipt as pricing):
- Appraisal Research — a written valuation the customer uses themselves. List price $199. Paid up front: a card hold, captured when the research is delivered. No guarantee.
- Appraisal Research + Negotiation — we act as the customer's appointed appraiser under their policy's appraisal clause. List price $497; with the discount below, $472. A card hold is placed, not a charge. It is captured only after the settlement improves by at least $1,000 over the insurer's original offer — our minimum-improvement guarantee. If we don't clear that, nothing is charged and the hold is released.
The $25 discount. A customer you submit gets one $25 discount, saved on their consultation the moment we receive the intake, and stated in the customer_message we hand back. It applies to the representation fee only ($497 → $472). Appraisal Research alone stays $199; if the customer buys research first and later upgrades, the $25 is applied then, so the total is the same $472. It is one discount per customer from any source — a friend's referral, an appraiser's, or yours — never stacked. Registered agents always grant it; anonymous submissions do while the program allows it (pricing.discount.applied tells you).
How payment actually happens. Never through this API, and never through you. The customer signs in to their own consultation on our site, reads and accepts our terms themselves, and pre-authorizes their own card. The receipt's checkout block gives you the two pages to point them at — research_url and representation_url — which become available after the customer has confirmed and our free consultation is delivered. Do not collect card details, do not promise a specific outcome, and do not describe the hold as a charge. Refunds follow our published terms; the guarantee is a fee-waiver policy, not a promise that an insurer will pay a particular amount.
REST — one request
{
"agent": { "name": "OpenClaw", "platform": "openclaw", "version": "2026.9" },
"customer": { "first_name": "Jane", "phone": "8015550123" },
"vehicle": { "vin": "1HGCM82633A004352", "odometer": 88000 },
"loss": { "date_of_loss": "2026-09-01", "loss_state": "UT", "insurance_path": "own" },
"offer": { "insurer": "State Farm", "acv_offer_cents": 1250000 },
"consent": {
"attestation": "The owner asked me to submit their total loss to SecondAppraisal and knows they will be emailed, texted, and called to confirm.",
"notify_customer": true
},
"external_ref": "your-ticket-42"
}curl -X POST https://secondappraisal.com/api/agent/v1/intakes \
-H "Content-Type: application/json" \
-H "Idempotency-Key: your-ticket-42" \
-d @intake.json{
"intake_id": "cmu4psy5a…",
"status": "welcome_sent",
"customer_confirmation_url": "https://secondappraisal.com/from-agent/<token>",
"customer_message": "Hi Jane — OpenClaw shared your total-loss details with SecondAppraisal. … We will attempt to call you to confirm that you want our free appraisal consultation and to confirm this request came from you or your representative/agent. You can confirm right now here: https://secondappraisal.com/from-agent/<token>",
"contact_policy": {
"will_email": false, "will_text": true, "will_call": true,
"call_purpose": "confirm the request came from the customer or their representative/agent and that they want the free appraisal consultation",
"automated_calls": false
},
"preliminary": { "vehicle_label": "2003 Honda Accord EX", "market": { "low": 4200, "mid": 5600, "high": 7900 }, "adjusted_mid": 5450, "gap_vs_offer_cents": -705000, "…": "…" },
"missing_fields": ["customer.email"],
"poll_url": "https://secondappraisal.com/api/agent/v1/intakes/cmu4psy5a…",
"poll_token": "<shown once — store it>",
"docs_url": "https://secondappraisal.com/for-agents"
}Follow the intake with GET /api/agent/v1/intakes/{intake_id} and Authorization: Bearer <poll_token>. Attach the insurer's valuation report with POST /api/agent/v1/intakes/{intake_id}/documents (multipart file, PDF, ≤ 15 MB, allow two minutes). The full contract is the OpenAPI document below; it is generated from the same schema the server validates with.
MCP — the same thing as tools
A remote Model Context Protocol server (Streamable HTTP, stateless) at https://secondappraisal.com/mcp, server name com.secondappraisal/total-loss-intake. Tools:
submit_total_loss_intake— Submit a vehicle owner's total-loss situation to SecondAppraisal on their behalf.get_intake_status— Fetch the current receipt for a submitted intake (status, confirm link while still confirmable, preliminary)..upload_valuation_report— Attach the insurer's Market Valuation Report (CCC / Mitchell PDF) to a submitted intake.get_preliminary_estimate— A no-commitment early market read for a vehicle: comparable listing prices near the customer (10th percentile / median / 90th), an odometer-adjusted mid, and the gap vs the insurer's offer.get_state_total_loss_rules— State-specific total-loss facts: threshold and method, whether an independent appraiser must be licensed there, whether third-party appraisals are allowed, statute citations, must-know rights, common pitfalls, and the consumer hotline..
{
"mcpServers": {
"secondappraisal": {
"type": "streamable-http",
"url": "https://secondappraisal.com/mcp"
}
}
}The server card is at /.well-known/mcp.json. Agent-to-Agent callers: the A2A card is at /.well-known/agent-card.json and message/send to /a2a with the intake body as a DataPart returns a completed Task whose artifact is the receipt.
Machine-readable documents
- OpenAPI 3.0 — the REST contract.
- MCP server card — connect at
/mcp. - A2A agent card — JSON-RPC at
/a2a. - agents.json — OpenAPI-backed workflows.
- ai-catalog.json — every artifact above in one index; llms.txt for everything else we publish.
Questions, a directory listing, or a partnership: contact us. Our own credentials are at /credentials.