Rental Operations API Documentation

Read supplied tenancy documents, payment evidence, and inventory records without treating them as cleared funds or legal advice. Payment is the exact USDC price on Base with x402.

POSThttps://brainiac.software/api/v1/rental-operations/tenant-move-in-readiness$0.05 USDC

Check move-in readiness

Compare supplied move-in items with the items the caller marks as required. A pending item is not counted as present, and a complete list does not mean the handover was done.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "text": "Required: deposit\nRequired: inventory\nItem: I-1 | deposit | present\nItem: I-2 | inventory | pending\nThe keys were handed over.\n"
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "incomplete",
  "requirements": [
    {
      "name": "deposit",
      "state": "present",
      "interpretation": "stated"
    },
    {
      "name": "inventory",
      "state": "missing",
      "interpretation": "none"
    }
  ],
  "supplied": [
    {
      "id": "I-1",
      "kind": "deposit",
      "status": "present"
    },
    {
      "id": "I-2",
      "kind": "inventory",
      "status": "pending"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "ignored",
      "code": "unlabeled_line",
      "subject": "",
      "detail": "Lines without a recognized label were not read and their text was not copied."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/tenant-move-in-readiness" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "text": "Required: deposit\nRequired: inventory\nItem: I-1 | deposit | present\nItem: I-2 | inventory | pending\nThe keys were handed over.\n"
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/deposit-payment-evidence-check$0.04 USDC

Check deposit payment evidence

Compare deposit evidence with the expected amount, currency, and reference. A matching screenshot is still not treated as cleared funds.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "expected": [
    {
      "purpose": "deposit",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    }
  ],
  "evidence": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "checked",
  "items": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "amountSupplied": true,
      "currency": "USD",
      "expectedAmount": 900,
      "expectedSupplied": true,
      "expectedCurrency": "USD",
      "amountState": "matches",
      "referenceState": "matches",
      "cleared": false,
      "clearance": "not_confirmed"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "observation",
      "code": "clearance_not_confirmed",
      "subject": "E-1",
      "detail": "A screenshot or payment instruction is not evidence that funds have cleared."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/deposit-payment-evidence-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "expected": [
    {
      "purpose": "deposit",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    }
  ],
  "evidence": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/first-rent-payment-check$0.04 USDC

Check first-rent payment evidence

Compare first-rent evidence with the expected amount, currency, and reference. A payment instruction is not treated as cleared funds.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "expected": [
    {
      "purpose": "rent",
      "amount": 1200,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "evidence": [
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "checked",
  "items": [
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "amountSupplied": true,
      "currency": "USD",
      "expectedAmount": 1200,
      "expectedSupplied": true,
      "expectedCurrency": "USD",
      "amountState": "differs",
      "referenceState": "matches",
      "cleared": false,
      "clearance": "not_confirmed"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "observation",
      "code": "clearance_not_confirmed",
      "subject": "E-2",
      "detail": "A screenshot or payment instruction is not evidence that funds have cleared."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/first-rent-payment-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "expected": [
    {
      "purpose": "rent",
      "amount": 1200,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "evidence": [
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/tenancy-document-completeness$0.04 USDC

Check tenancy document completeness

List the document kinds the caller marked as required and which of them were supplied. A jurisdiction name does not add a legal checklist.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "jurisdiction": "GB",
  "requirements": [
    {
      "kind": "document",
      "name": "tenancy"
    },
    {
      "kind": "document",
      "name": "inventory"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "tenancy",
      "issued": "2026-11-01"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "incomplete",
  "jurisdiction": "GB",
  "requirements": [
    {
      "name": "tenancy",
      "state": "supplied",
      "interpretation": "stated"
    },
    {
      "name": "inventory",
      "state": "missing",
      "interpretation": "none"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "unavailable",
      "code": "jurisdiction_not_checked",
      "subject": "GB",
      "detail": "No verified rule set is available for this jurisdiction. Only requirements written in the request are used."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/tenancy-document-completeness" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "jurisdiction": "GB",
  "requirements": [
    {
      "kind": "document",
      "name": "tenancy"
    },
    {
      "kind": "document",
      "name": "inventory"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "tenancy",
      "issued": "2026-11-01"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/move-in-inventory-compare$0.05 USDC

Compare move-in inventory

Compare a baseline inventory with the move-in list by room, name, condition, and count. A difference is not a finding of liability.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "inventory": [
    {
      "list": "baseline",
      "room": "kitchen",
      "name": "kettle",
      "condition": "good",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "kitchen",
      "name": "kettle",
      "condition": "damaged",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "hall",
      "name": "lamp",
      "condition": "good",
      "count": 1
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "compared",
  "items": [
    {
      "room": "kitchen",
      "name": "kettle",
      "presence": "both",
      "baselineCondition": "good",
      "moveInCondition": "damaged",
      "conditionState": "differs",
      "baselineCount": 1,
      "moveInCount": 1,
      "countState": "same",
      "liabilityDetermined": false
    },
    {
      "room": "hall",
      "name": "lamp",
      "presence": "move_in_only",
      "baselineCondition": "",
      "moveInCondition": "good",
      "conditionState": "not_compared",
      "baselineCount": 0,
      "moveInCount": 1,
      "countState": "not_compared",
      "liabilityDetermined": false
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/move-in-inventory-compare" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "inventory": [
    {
      "list": "baseline",
      "room": "kitchen",
      "name": "kettle",
      "condition": "good",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "kitchen",
      "name": "kettle",
      "condition": "damaged",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "hall",
      "name": "lamp",
      "condition": "good",
      "count": 1
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/tenant-document-expiry-check$0.04 USDC

Check tenant document expiry

Compare supplied expiry dates with a supplied as-of date. No as-of date means expiry is not judged, and a document number is reduced to its last four characters.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "asOf": "2026-11-04",
  "rules": [
    {
      "name": "within",
      "value": "30"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "AB123456"
    },
    {
      "id": "D-2",
      "kind": "visa",
      "expires": "2026-11-20",
      "holder": "tenant",
      "number": "XY987654"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "checked",
  "asOf": "2026-11-04",
  "within": 30,
  "withinSupplied": true,
  "items": [
    {
      "id": "D-1",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "••••3456",
      "days": -3,
      "daysSupplied": true,
      "state": "expired",
      "due": false,
      "legalAdvice": false
    },
    {
      "id": "D-2",
      "kind": "visa",
      "expires": "2026-11-20",
      "holder": "tenant",
      "number": "••••7654",
      "days": 16,
      "daysSupplied": true,
      "state": "current",
      "due": true,
      "legalAdvice": false
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/tenant-document-expiry-check" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "asOf": "2026-11-04",
  "rules": [
    {
      "name": "within",
      "value": "30"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "AB123456"
    },
    {
      "id": "D-2",
      "kind": "visa",
      "expires": "2026-11-20",
      "holder": "tenant",
      "number": "XY987654"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/tenancy-obligation-extract$0.04 USDC

Extract tenancy obligations

Copy labeled obligations, the stated party, and a real due date. The wording is not treated as legal advice or an eviction right.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "text": "Obligation: O-1 | tenant | 2026-11-15 | pay the first rent\nObligation: O-2 | landlord | | repair the boiler\nThe tenant can be evicted.\n"
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "extracted",
  "items": [
    {
      "id": "O-1",
      "party": "tenant",
      "partyKnown": true,
      "due": "2026-11-15",
      "text": "pay the first rent",
      "enforceable": false,
      "interpretation": "stated"
    },
    {
      "id": "O-2",
      "party": "landlord",
      "partyKnown": true,
      "due": "",
      "text": "repair the boiler",
      "enforceable": false,
      "interpretation": "stated"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "ignored",
      "code": "unlabeled_line",
      "subject": "",
      "detail": "Lines without a recognized label were not read and their text was not copied."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/tenancy-obligation-extract" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "text": "Obligation: O-1 | tenant | 2026-11-15 | pay the first rent\nObligation: O-2 | landlord | | repair the boiler\nThe tenant can be evicted.\n"
}
JSON
POSThttps://brainiac.software/api/v1/rental-operations/handover-report$0.12 USDC

Report a rental handover

Combine the supplied readiness items, payment evidence, inventory comparison, document dates, and obligations. The report does not clear funds, give legal advice, or complete a handover.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
requirementsNoarray; Array
itemsNoarray; Array
expectedNoarray; Array
evidenceNoarray; Array
documentsNoarray; Array
inventoryNoarray; Array
obligationsNoarray; Array
jurisdictionNostring
asOfNostring
rulesNoarray; Array

Request exampleJSON

{
  "jurisdiction": "GB",
  "asOf": "2026-11-04",
  "requirements": [
    {
      "kind": "item",
      "name": "deposit"
    },
    {
      "kind": "item",
      "name": "inventory"
    },
    {
      "kind": "document",
      "name": "tenancy"
    }
  ],
  "items": [
    {
      "id": "I-1",
      "kind": "deposit",
      "status": "present"
    },
    {
      "id": "I-2",
      "kind": "inventory",
      "status": "pending"
    }
  ],
  "expected": [
    {
      "purpose": "deposit",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    },
    {
      "purpose": "rent",
      "amount": 1200,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "evidence": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    },
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "tenancy",
      "issued": "2026-11-01"
    },
    {
      "id": "D-2",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "AB123456"
    }
  ],
  "inventory": [
    {
      "list": "baseline",
      "room": "kitchen",
      "name": "kettle",
      "condition": "good",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "kitchen",
      "name": "kettle",
      "condition": "damaged",
      "count": 1
    }
  ],
  "obligations": [
    {
      "id": "O-1",
      "party": "tenant",
      "due": "2026-11-15",
      "text": "pay the first rent"
    }
  ]
}

Response exampleJSON

{
  "checkedAt": "2026-11-04T14:00:00.000Z",
  "status": "reported",
  "missingCount": 1,
  "depositMatched": 1,
  "rentMatched": 0,
  "inventoryDifferenceCount": 1,
  "expiredCount": 1,
  "dueCount": 0,
  "obligationCount": 1,
  "jurisdiction": "GB",
  "requirements": [
    {
      "name": "deposit",
      "state": "present",
      "interpretation": "stated"
    },
    {
      "name": "inventory",
      "state": "missing",
      "interpretation": "none"
    },
    {
      "name": "tenancy",
      "state": "supplied",
      "interpretation": "stated"
    }
  ],
  "payments": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "amountSupplied": true,
      "currency": "USD",
      "expectedAmount": 900,
      "expectedSupplied": true,
      "expectedCurrency": "USD",
      "amountState": "matches",
      "referenceState": "matches",
      "cleared": false,
      "clearance": "not_confirmed"
    },
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "amountSupplied": true,
      "currency": "USD",
      "expectedAmount": 1200,
      "expectedSupplied": true,
      "expectedCurrency": "USD",
      "amountState": "differs",
      "referenceState": "matches",
      "cleared": false,
      "clearance": "not_confirmed"
    }
  ],
  "inventory": [
    {
      "room": "kitchen",
      "name": "kettle",
      "presence": "both",
      "baselineCondition": "good",
      "moveInCondition": "damaged",
      "conditionState": "differs",
      "baselineCount": 1,
      "moveInCount": 1,
      "countState": "same",
      "liabilityDetermined": false
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "tenancy",
      "expires": "",
      "holder": "",
      "number": "",
      "days": 0,
      "daysSupplied": false,
      "state": "not_checked",
      "due": false,
      "legalAdvice": false
    },
    {
      "id": "D-2",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "••••3456",
      "days": -3,
      "daysSupplied": true,
      "state": "expired",
      "due": false,
      "legalAdvice": false
    }
  ],
  "obligations": [
    {
      "id": "O-1",
      "party": "tenant",
      "partyKnown": true,
      "due": "2026-11-15",
      "text": "pay the first rent",
      "enforceable": false,
      "interpretation": "stated"
    }
  ],
  "fundsCleared": false,
  "legalAdvice": false,
  "evictionDetermined": false,
  "handoverCompleted": false,
  "tenantContacted": false,
  "rulesApplied": false,
  "findings": [
    {
      "kind": "unavailable",
      "code": "jurisdiction_not_checked",
      "subject": "GB",
      "detail": "No verified rule set is available for this jurisdiction. Only requirements written in the request are used."
    },
    {
      "kind": "observation",
      "code": "clearance_not_confirmed",
      "subject": "E-1",
      "detail": "A screenshot or payment instruction is not evidence that funds have cleared."
    },
    {
      "kind": "observation",
      "code": "clearance_not_confirmed",
      "subject": "E-2",
      "detail": "A screenshot or payment instruction is not evidence that funds have cleared."
    }
  ],
  "limitations": [
    "Tenancy documents, payment records, and inventory rows are copied only from labeled fields supplied by the caller.",
    "A screenshot or payment instruction is not treated as cleared funds. No record is confirmed with a bank.",
    "A jurisdiction name does not select a legal checklist. Only requirements written in the request are used.",
    "An extracted obligation is the supplied wording. It is not legal advice and it does not decide an eviction right.",
    "No tenant is contacted and no handover is completed."
  ]
}

cURL

curl -i -X POST "https://brainiac.software/api/v1/rental-operations/handover-report" \
  -H 'content-type: application/json' \
  -H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
  --data-binary @- <<'JSON'
{
  "jurisdiction": "GB",
  "asOf": "2026-11-04",
  "requirements": [
    {
      "kind": "item",
      "name": "deposit"
    },
    {
      "kind": "item",
      "name": "inventory"
    },
    {
      "kind": "document",
      "name": "tenancy"
    }
  ],
  "items": [
    {
      "id": "I-1",
      "kind": "deposit",
      "status": "present"
    },
    {
      "id": "I-2",
      "kind": "inventory",
      "status": "pending"
    }
  ],
  "expected": [
    {
      "purpose": "deposit",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    },
    {
      "purpose": "rent",
      "amount": 1200,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "evidence": [
    {
      "id": "E-1",
      "purpose": "deposit",
      "form": "screenshot",
      "amount": 900,
      "currency": "USD",
      "reference": "DEP-100"
    },
    {
      "id": "E-2",
      "purpose": "rent",
      "form": "instruction",
      "amount": 1000,
      "currency": "USD",
      "reference": "RENT-1"
    }
  ],
  "documents": [
    {
      "id": "D-1",
      "kind": "tenancy",
      "issued": "2026-11-01"
    },
    {
      "id": "D-2",
      "kind": "passport",
      "expires": "2026-11-01",
      "holder": "tenant",
      "number": "AB123456"
    }
  ],
  "inventory": [
    {
      "list": "baseline",
      "room": "kitchen",
      "name": "kettle",
      "condition": "good",
      "count": 1
    },
    {
      "list": "move-in",
      "room": "kitchen",
      "name": "kettle",
      "condition": "damaged",
      "count": 1
    }
  ],
  "obligations": [
    {
      "id": "O-1",
      "party": "tenant",
      "due": "2026-11-15",
      "text": "pay the first rent"
    }
  ]
}
JSON