Read a lease (PDF, JPEG or PNG, at most 4 MB and, for a PDF, 40 pages, as base64) with an AI service (Claude Haiku 4.5 through OpenRouter) and answer the facts the new-case form takes. For a file the free reading on the device could not read. With `kind: "correspondence"` and `files` (1 to 10 messages with the tenant: PDF, JPEG, PNG, plain text `text/plain`, or a saved email `message/rfc822` (`.eml`, at most 1 MB, turned into its text before it is sent); 8 MB, 40 PDF pages and 200,000 characters of text in all), it drafts what happened for a lease-violation case (`violationDescription`, `violationDate`): a draft for the person to read and correct, never a checked answer. One request counts once against the hourly limit, whatever the number of files. With `kind: "ledger"` and one `file` (a tenant ledger PDF, at most 4 MB and 40 pages), it answers the ledger's rows (`rows`, each `{ date, type: "charge" | "payment", amountCents, memo }`, at most 500, in the order printed) a balance brought forward from before them (`openingBalanceCents`, null when none) and the ending balance the ledger states (`endingBalanceCents`, null when it states none), for the caller to check: the balance brought forward and the rows should add up to the ending balance, and the website fills in nothing when they do not. A row dated after today is left out. The files are sent to OpenRouter only for this one reading, under fixed names (the `name` you send is never passed on), on endpoints that keep no data; nothing is stored and nothing of the files or the answer is logged. Every answer is a suggestion for a person to check: a fact the reading is unsure of is left out, never guessed. When the service refuses, fails or takes over 30 seconds, the answer is empty (`{ "suggestions": {}, "confidence": {} }`, or for a ledger `{ "rows": [], "openingBalanceCents": null, "endingBalanceCents": null }`), never an error. For now only the signed-in app and test keys can use it: a live API key answers 503 `extract_unavailable`. At most 20 an hour per organization (429 `rate_limited`); 503 `extract_unavailable` when the server has no AI service set

post/v1/extract

Request

  • Base URL: https://api.evictionsapi.com
  • URL: https://api.evictionsapi.com/v1/extract
  • Auth: one of:
    • HTTP bearer
    • HTTP bearer

Request body

OR
OR

Response

The answers found, in the same shape as the website's lease reading: each a { value, source: "lease_file" } (source: "messages" for the messages' draft), and how sure the reading is of each (high or medium). Dates are YYYY-MM-DD, monthlyRent is dollars with cents ("1450.00"), noticePeriod is whole days ("3"), state is the two-letter code; parties lists the landlord (plaintiff) and the tenants (defendant). From messages: violationDescription (a few plain sentences, at most 2,000 characters) and violationDate (never later than today).

OR

Changes

No recorded changes to this operation across all 1 revision of this API.