Property Maintenance API Documentation
Read supplied repair requests, quotes, and invoices, and flag safety keywords for a person without calling a property safe. Payment is the exact USDC price on Base with x402.
https://brainiac.software/api/v1/property-maintenance/request-classify$0.04 USDCClassify a maintenance request
Classify a stated type only from an explicit token, and flag a documented safety keyword for a person to review. An unrecognized word is left unrecognized.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"text": "Request: M-1 | 10 Example Street | 2026-11-01 | | leak | routine | drip under the sink\nRequest: M-2 | 10 Example Street | 2026-11-02 | | erase | | gas smell in the kitchen\nThe tenant is angry.\n"
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "classified",
"items": [
{
"id": "M-1",
"property": "10 Example Street",
"reported": "2026-11-01",
"type": "leak",
"category": "plumbing",
"urgency": "routine",
"safety": false,
"keyword": "",
"escalation": "none",
"confirmed": false,
"propertySafe": false,
"interpretation": "stated"
},
{
"id": "M-2",
"property": "10 Example Street",
"reported": "2026-11-02",
"type": "erase",
"category": "unrecognized",
"urgency": "not_stated",
"safety": true,
"keyword": "gas",
"escalation": "human",
"confirmed": false,
"propertySafe": false,
"interpretation": "stated"
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [
{
"kind": "ignored",
"code": "unlabeled_line",
"subject": "",
"detail": "Lines without a recognized label were not read and their text was not copied."
},
{
"kind": "observation",
"code": "safety_keyword",
"subject": "M-2",
"detail": "The supplied text contains \"gas\". A person should review it. This is not a finding that the property is unsafe."
}
],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/request-classify" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"text": "Request: M-1 | 10 Example Street | 2026-11-01 | | leak | routine | drip under the sink\nRequest: M-2 | 10 Example Street | 2026-11-02 | | erase | | gas smell in the kitchen\nThe tenant is angry.\n"
}
JSONhttps://brainiac.software/api/v1/property-maintenance/priority-assess$0.04 USDCAssess maintenance priority
Apply a fixed order: a safety keyword, then a stated emergency, urgent, or routine urgency. A missing urgency is not treated as routine, and the result is not a safety verdict.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"requests": [
{
"id": "M-1",
"type": "leak",
"urgency": "routine",
"text": "drip under the sink"
},
{
"id": "M-2",
"type": "erase",
"text": "gas smell in the kitchen"
},
{
"id": "M-3",
"text": "paint the hall"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "assessed",
"items": [
{
"id": "M-1",
"priority": "routine",
"rule": "stated_routine",
"urgency": "routine",
"safety": false,
"keyword": "",
"propertySafe": false
},
{
"id": "M-2",
"priority": "escalate",
"rule": "safety_keyword",
"urgency": "not_stated",
"safety": true,
"keyword": "gas",
"propertySafe": false
},
{
"id": "M-3",
"priority": "not_assessed",
"rule": "not_assessed",
"urgency": "not_stated",
"safety": false,
"keyword": "",
"propertySafe": false
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/priority-assess" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"requests": [
{
"id": "M-1",
"type": "leak",
"urgency": "routine",
"text": "drip under the sink"
},
{
"id": "M-2",
"type": "erase",
"text": "gas smell in the kitchen"
},
{
"id": "M-3",
"text": "paint the hall"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/work-order-generate$0.05 USDCDraft a maintenance work order
Write a draft from the stated property, type, issue, and contractor name. The draft is not sent and no contractor is dispatched.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip under the sink"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "drafted",
"orders": [
{
"requestId": "M-1",
"property": "10 Example Street",
"contractor": "",
"sent": false,
"text": "Request M-1. Property: 10 Example Street. Stated type: leak (plumbing). Stated issue: drip under the sink. Stated urgency: routine. This draft was not sent and no contractor was dispatched."
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/work-order-generate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip under the sink"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/contractor-quote-compare$0.05 USDCCompare contractor quotes
Compare supplied quotes by price, stated completion days, scope, and exclusions. The lowest price is not a recommendation, and different currencies are not converted.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"quotes": [
{
"id": "Q-1",
"requestId": "M-1",
"contractor": "North Trades",
"amount": 200,
"currency": "USD",
"days": 5,
"scope": "replace trap",
"exclusions": "parts"
},
{
"id": "Q-2",
"requestId": "M-1",
"contractor": "South Trades",
"amount": 150,
"currency": "USD",
"days": 5,
"scope": "replace trap"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "compared",
"groups": [
{
"requestId": "M-1",
"price": "compared",
"time": "tied",
"scope": "same",
"quotes": [
{
"id": "Q-1",
"contractor": "North Trades",
"amount": 200,
"amountSupplied": true,
"currency": "USD",
"days": 5,
"daysSupplied": true,
"scope": "replace trap",
"exclusions": "parts",
"lowest": false,
"shortest": false,
"recommended": false
},
{
"id": "Q-2",
"contractor": "South Trades",
"amount": 150,
"amountSupplied": true,
"currency": "USD",
"days": 5,
"daysSupplied": true,
"scope": "replace trap",
"exclusions": "",
"lowest": true,
"shortest": false,
"recommended": false
}
]
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/contractor-quote-compare" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"quotes": [
{
"id": "Q-1",
"requestId": "M-1",
"contractor": "North Trades",
"amount": 200,
"currency": "USD",
"days": 5,
"scope": "replace trap",
"exclusions": "parts"
},
{
"id": "Q-2",
"requestId": "M-1",
"contractor": "South Trades",
"amount": 150,
"currency": "USD",
"days": 5,
"scope": "replace trap"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/response-sla-check$0.04 USDCCheck a response service level
Compare a supplied response time with the service level for that stated urgency. No deadline is assumed when the caller does not supply one.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"slas": [
{
"urgency": "emergency",
"limit": 4,
"unit": "hours"
}
],
"requests": [
{
"id": "M-1",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00Z",
"responded": "2026-11-01T16:00:00Z"
},
{
"id": "M-2",
"urgency": "routine",
"reported": "2026-11-01",
"responded": "2026-11-02"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "checked",
"items": [
{
"id": "M-1",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00.000Z",
"responded": "2026-11-01T16:00:00.000Z",
"asOfUsed": false,
"limit": 4,
"unit": "hours",
"elapsed": 6,
"elapsedSupplied": true,
"state": "outside",
"legalCompliance": false
},
{
"id": "M-2",
"urgency": "routine",
"reported": "2026-11-01",
"responded": "2026-11-02",
"asOfUsed": false,
"limit": 0,
"unit": "",
"elapsed": 0,
"elapsedSupplied": false,
"state": "not_checked",
"legalCompliance": false
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [
{
"kind": "unavailable",
"code": "sla_missing",
"subject": "M-2",
"detail": "No supplied service level matches this stated urgency. No deadline was assumed."
}
],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/response-sla-check" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"slas": [
{
"urgency": "emergency",
"limit": 4,
"unit": "hours"
}
],
"requests": [
{
"id": "M-1",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00Z",
"responded": "2026-11-01T16:00:00Z"
},
{
"id": "M-2",
"urgency": "routine",
"reported": "2026-11-01",
"responded": "2026-11-02"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/repair-history-analyze$0.04 USDCAnalyze repair history
Count supplied requests for the same property and type. A repeat is reported at three or more. The count is not a finding that the property is unsafe.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-2",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-3",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-4",
"property": "10 Example Street",
"type": "pest"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "analyzed",
"items": [
{
"property": "10 Example Street",
"type": "plumbing",
"category": "plumbing",
"count": 3,
"pattern": true,
"requests": [
"M-1",
"M-2",
"M-3"
],
"propertySafe": false
},
{
"property": "10 Example Street",
"type": "pest",
"category": "pest",
"count": 1,
"pattern": false,
"requests": [
"M-4"
],
"propertySafe": false
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/repair-history-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-2",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-3",
"property": "10 Example Street",
"type": "leak"
},
{
"id": "M-4",
"property": "10 Example Street",
"type": "pest"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/invoice-validate$0.04 USDCValidate a maintenance invoice
Compare an invoice amount and scope with one linked quote. A difference is not an overcharge finding, and a stated paid status does not mean a payment was sent.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"quotes": [
{
"id": "Q-1",
"amount": 150,
"currency": "USD",
"scope": "replace trap"
}
],
"invoices": [
{
"id": "I-1",
"quoteId": "Q-1",
"amount": 180,
"currency": "USD",
"scope": "replace trap",
"status": "submitted"
},
{
"id": "I-2",
"quoteId": "Q-9",
"amount": 180,
"currency": "USD",
"scope": "replace trap",
"status": "paid"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "checked",
"items": [
{
"id": "I-1",
"quoteId": "Q-1",
"status": "submitted",
"currency": "USD",
"invoiceAmount": 180,
"invoiceSupplied": true,
"quoteAmount": 150,
"quoteSupplied": true,
"amountState": "above",
"scopeState": "same",
"paymentSent": false,
"legalCompliance": false
},
{
"id": "I-2",
"quoteId": "Q-9",
"status": "paid",
"currency": "USD",
"invoiceAmount": 180,
"invoiceSupplied": true,
"quoteAmount": 0,
"quoteSupplied": false,
"amountState": "not_compared",
"scopeState": "not_compared",
"paymentSent": false,
"legalCompliance": false
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [
{
"kind": "unavailable",
"code": "quote_missing",
"subject": "I-2",
"detail": "No single supplied quote is linked, so the invoice amount was not compared."
}
],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/invoice-validate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"quotes": [
{
"id": "Q-1",
"amount": 150,
"currency": "USD",
"scope": "replace trap"
}
],
"invoices": [
{
"id": "I-1",
"quoteId": "Q-1",
"amount": 180,
"currency": "USD",
"scope": "replace trap",
"status": "submitted"
},
{
"id": "I-2",
"quoteId": "Q-9",
"amount": 180,
"currency": "USD",
"scope": "replace trap",
"status": "paid"
}
]
}
JSONhttps://brainiac.software/api/v1/property-maintenance/report$0.12 USDCReport property maintenance
Combine supplied request classes, safety keywords, quote comparisons, service levels, repeat repairs, and invoice differences. The report does not call a property safe or dispatch a contractor.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
requests | No | array; Array |
quotes | No | array; Array |
invoices | No | array; Array |
slas | No | array; Array |
works | No | array; Array |
asOf | No | string |
rules | No | array; Array |
Request exampleJSON
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00Z",
"responded": "2026-11-01T16:00:00Z",
"text": "gas smell in the kitchen"
},
{
"id": "M-2",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip"
},
{
"id": "M-3",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip"
}
],
"quotes": [
{
"id": "Q-1",
"requestId": "M-1",
"contractor": "North Trades",
"amount": 200,
"currency": "USD",
"days": 5,
"scope": "replace trap"
},
{
"id": "Q-2",
"requestId": "M-1",
"contractor": "South Trades",
"amount": 150,
"currency": "USD",
"days": 5,
"scope": "replace trap"
}
],
"invoices": [
{
"id": "I-1",
"quoteId": "Q-1",
"amount": 250,
"currency": "USD",
"scope": "replace trap",
"status": "submitted"
}
],
"slas": [
{
"urgency": "emergency",
"limit": 4,
"unit": "hours"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T13:00:00.000Z",
"status": "reported",
"requestCount": 3,
"safetyCount": 1,
"escalateCount": 1,
"outsideCount": 1,
"patternCount": 1,
"invoiceDifferenceCount": 1,
"items": [
{
"id": "M-1",
"property": "10 Example Street",
"reported": "2026-11-01T10:00:00.000Z",
"type": "leak",
"category": "plumbing",
"urgency": "emergency",
"safety": true,
"keyword": "gas",
"escalation": "human",
"confirmed": false,
"propertySafe": false,
"interpretation": "stated"
},
{
"id": "M-2",
"property": "10 Example Street",
"reported": "",
"type": "leak",
"category": "plumbing",
"urgency": "routine",
"safety": false,
"keyword": "",
"escalation": "none",
"confirmed": false,
"propertySafe": false,
"interpretation": "stated"
},
{
"id": "M-3",
"property": "10 Example Street",
"reported": "",
"type": "leak",
"category": "plumbing",
"urgency": "routine",
"safety": false,
"keyword": "",
"escalation": "none",
"confirmed": false,
"propertySafe": false,
"interpretation": "stated"
}
],
"priorities": [
{
"id": "M-1",
"priority": "escalate",
"rule": "safety_keyword",
"urgency": "emergency",
"safety": true,
"keyword": "gas",
"propertySafe": false
},
{
"id": "M-2",
"priority": "routine",
"rule": "stated_routine",
"urgency": "routine",
"safety": false,
"keyword": "",
"propertySafe": false
},
{
"id": "M-3",
"priority": "routine",
"rule": "stated_routine",
"urgency": "routine",
"safety": false,
"keyword": "",
"propertySafe": false
}
],
"orders": [
{
"requestId": "M-1",
"property": "10 Example Street",
"contractor": "",
"sent": false,
"text": "Request M-1. Property: 10 Example Street. Stated type: leak (plumbing). Stated issue: gas smell in the kitchen. Stated urgency: emergency. The supplied text contains \"gas\". A person should review it. This draft was not sent and no contractor was dispatched."
},
{
"requestId": "M-2",
"property": "10 Example Street",
"contractor": "",
"sent": false,
"text": "Request M-2. Property: 10 Example Street. Stated type: leak (plumbing). Stated issue: drip. Stated urgency: routine. This draft was not sent and no contractor was dispatched."
},
{
"requestId": "M-3",
"property": "10 Example Street",
"contractor": "",
"sent": false,
"text": "Request M-3. Property: 10 Example Street. Stated type: leak (plumbing). Stated issue: drip. Stated urgency: routine. This draft was not sent and no contractor was dispatched."
}
],
"groups": [
{
"requestId": "M-1",
"price": "compared",
"time": "tied",
"scope": "same",
"quotes": [
{
"id": "Q-1",
"contractor": "North Trades",
"amount": 200,
"amountSupplied": true,
"currency": "USD",
"days": 5,
"daysSupplied": true,
"scope": "replace trap",
"exclusions": "",
"lowest": false,
"shortest": false,
"recommended": false
},
{
"id": "Q-2",
"contractor": "South Trades",
"amount": 150,
"amountSupplied": true,
"currency": "USD",
"days": 5,
"daysSupplied": true,
"scope": "replace trap",
"exclusions": "",
"lowest": true,
"shortest": false,
"recommended": false
}
]
}
],
"service": [
{
"id": "M-1",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00.000Z",
"responded": "2026-11-01T16:00:00.000Z",
"asOfUsed": false,
"limit": 4,
"unit": "hours",
"elapsed": 6,
"elapsedSupplied": true,
"state": "outside",
"legalCompliance": false
},
{
"id": "M-2",
"urgency": "routine",
"reported": "",
"responded": "",
"asOfUsed": false,
"limit": 0,
"unit": "",
"elapsed": 0,
"elapsedSupplied": false,
"state": "not_checked",
"legalCompliance": false
},
{
"id": "M-3",
"urgency": "routine",
"reported": "",
"responded": "",
"asOfUsed": false,
"limit": 0,
"unit": "",
"elapsed": 0,
"elapsedSupplied": false,
"state": "not_checked",
"legalCompliance": false
}
],
"history": [
{
"property": "10 Example Street",
"type": "plumbing",
"category": "plumbing",
"count": 3,
"pattern": true,
"requests": [
"M-1",
"M-2",
"M-3"
],
"propertySafe": false
}
],
"invoices": [
{
"id": "I-1",
"quoteId": "Q-1",
"status": "submitted",
"currency": "USD",
"invoiceAmount": 250,
"invoiceSupplied": true,
"quoteAmount": 200,
"quoteSupplied": true,
"amountState": "above",
"scopeState": "same",
"paymentSent": false,
"legalCompliance": false
}
],
"contractorDispatched": false,
"tenantContacted": false,
"propertySafe": false,
"legalCompliance": false,
"workOrdered": false,
"findings": [
{
"kind": "observation",
"code": "safety_keyword",
"subject": "M-1",
"detail": "The supplied text contains \"gas\". A person should review it. This is not a finding that the property is unsafe."
},
{
"kind": "unavailable",
"code": "sla_missing",
"subject": "M-2",
"detail": "No supplied service level matches this stated urgency. No deadline was assumed."
},
{
"kind": "unavailable",
"code": "sla_missing",
"subject": "M-3",
"detail": "No supplied service level matches this stated urgency. No deadline was assumed."
}
],
"limitations": [
"Requests, quotes, invoices, and service levels are copied only from labeled fields supplied by the caller.",
"A type is classified only from an explicit token: leak, plumbing, pipe, drain, electrical, power, outlet, wiring, heat, heating, hvac, boiler, lock, door, access, appliance, pest, structural, roof, or ceiling.",
"A safety flag is a keyword match for a person to review. It does not mean the property is unsafe or legally non-compliant.",
"A quote comparison does not recommend a contractor. A work-order draft is not sent.",
"No contractor is dispatched and no tenant is contacted."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/property-maintenance/report" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"requests": [
{
"id": "M-1",
"property": "10 Example Street",
"type": "leak",
"urgency": "emergency",
"reported": "2026-11-01T10:00:00Z",
"responded": "2026-11-01T16:00:00Z",
"text": "gas smell in the kitchen"
},
{
"id": "M-2",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip"
},
{
"id": "M-3",
"property": "10 Example Street",
"type": "leak",
"urgency": "routine",
"text": "drip"
}
],
"quotes": [
{
"id": "Q-1",
"requestId": "M-1",
"contractor": "North Trades",
"amount": 200,
"currency": "USD",
"days": 5,
"scope": "replace trap"
},
{
"id": "Q-2",
"requestId": "M-1",
"contractor": "South Trades",
"amount": 150,
"currency": "USD",
"days": 5,
"scope": "replace trap"
}
],
"invoices": [
{
"id": "I-1",
"quoteId": "Q-1",
"amount": 250,
"currency": "USD",
"scope": "replace trap",
"status": "submitted"
}
],
"slas": [
{
"urgency": "emergency",
"limit": 4,
"unit": "hours"
}
]
}
JSON