One photo in.
One answer out.
POST a resident's photo. One fixed JSON shape comes back: what it is, whether a fault is visible, how urgent, and which trade to call.
Make a request your way
Pick how you will call it. The answer that comes back is the same.
Not every photo is an emergency. The job is knowing which.
Two answers the engine returned on the same day. Both found a real fault. Only one has to be dealt with tonight.
Map it to your work order
No integration to install and nothing to keep in sync. Read the fields you want.
| THE FIELD WE RETURN | THE WORK-ORDER FIELD IT FILLS |
|---|---|
| core.tier | Your priority field. Four words, mapped to your own four. |
| core.asset_type | The equipment the order is against. |
| core.trade_required | The vendor category, or the queue it routes to. |
| core.fault_summary | The order's description, written for a person to read. |
| core.safety_hazard | The flag that takes it out of the normal queue. |
| core.resident_explanation | The line you send the resident, as written. |
| diagnosis_id | Your external reference, so the outcome can come back. |
| callback_url | Where you POST what it turned out to be, once you know. |
Built to be relied on
The things a developer asks before wiring it in.
One fixed shape
Twenty core fields, versioned. The same shape whether the photo is a leak or nothing at all.
Three reads, one answer
The photo is read three times (five on deep) and the reply says how many agreed.
One rule in code
Wiring a person could touch, or water near anything electrical, forces EMERGENCY.
Limits that say so
When a limit stops you, the reply names it in a sentence, with a Retry-After counted from the clock.
Try it without a key
A mock server replays captured replies, so you can wire a client before spending a request.
Tell us how it went
Every reply carries a callback_url. POST what it turned out to be.
Spanish on request
lang=es returns the prose in Spanish. The hazard line stays in English, on purpose.
The photo stays with its answer
Location details are stripped first. We keep the answer, a fingerprint of the file and the cleaned photo with its Triage Profile. Send keep_photo false and the photo is not kept. Our model provider keeps what it is sent for 55 days.
Inside your AI tools
The same call in Claude, ChatGPT, Cursor or Gemini. Paste the key once.
Get a key.
Your email, your company, your name, one line on what you are building, and a tick for the API terms. The key is emailed to you with a curl line that uses it.
- 60 requests a UTC day on each key
- Past 60? It answers again at 00:00 UTC. Need more, write to us and a founder answers within one business day (after the key).
- Paid use is quoted
The form POSTs { kind: "api_key", email, company, name, use_case, terms_accepted, source, role, variant, consent_version } to /api/leads. The reply names the key's id, never the key: the key reaches you by email. terms_accepted is the box above, unticked until you tick it; without it the request is refused and nothing is sent. consent_version is the version of the consent line above, recorded with the request as your acceptance of the API terms. company and name are for which company and by which person that acceptance is given; with the consent version and the time of the request they are the four details the API terms say the acceptance record shows, and all four are stored with the request before the key is mailed. Before you type, the page checks whether that endpoint is live on the deployment you are reading; if it is not, the form is disabled and says so rather than pretending, and the same details by email to support@fixragent.com do the same job.
After the key: 60 a day, and what happens past that
Keys are 60 requests a UTC day. Past that, write to support@fixragent.com and say what you are building — a founder answers within one business day.
Three things you have once the key is in your hands:
- The outcome callback. Every reply carries a
callback_url. When you find out what the thing turned out to be, POST it there; the outcome loop has the fields. - The sample set. The mock server replays captured replies so you can wire a client before spending a request, and the sample response in the reference is a real one, abridged.
- The connector. /connect-ai puts the same call inside Claude, ChatGPT, Cursor or Gemini: paste the key once and each setup button fills itself in.
When a key reaches 60 in a UTC day the reply is 429 demo_key_quota, with Retry-After counted to the next 00:00 UTC and the same sentence in its message. The key is not revoked; it answers again at 00:00 UTC.
The full reference
Every field, parameter, error and limit, on its own page.
Not writing the code?
Start without any.
The same engine, with nothing to build: stickers, a queue and the same four urgency words.