---
title: "Per-listing requirement rows: the landlord's stated rule, the original sentence, source and date. No renter data of any kind."
method: GET
path: "/v1/listings/requirements"
tags: ["rental_readiness"]
---

# Per-listing requirement rows: the landlord's stated rule, the original sentence, source and date. No renter data of any kind.

`GET /v1/listings/requirements`

## Request

- Base URL: `https://www.putroots.com`
- URL: `https://www.putroots.com/v1/listings/requirements`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

For one listing url from GET /v1/listings: the requirement lines the landlord actually stated (income multiple, credit score, SSN, co-signer, deposit, fee, lease length, documents), each with the landlord's own sentence, where the rule came from and when we fetched it. Contains nothing about any renter. "Not stated" is an answer: a listing with zero rows means the landlord wrote none, not that requirements are unknown to us.

## Query parameters

- `url` string, required

## Response `200`

OK

- object
  - `source` object, required: Who answered: the string "putroots", except on operations whose payload carries its own structured source (then that object wins).
    - `kind` 'landlord_rules' | 'listing_text', required
    - `name` string, nullable
    - `from` string, required
    - `fetched_at` union, required: Epoch ms for landlord rules; ISO date for listing text.
      - number
      - string
    - `fetched_from` string, nullable
  - `fetched_at` string, date-time, required
  - `listing` string, required
  - `price` number, nullable, required
  - `requirements_stated` boolean, required
  - `requirements` object[], required
    - `key` string, required
    - `label` string, required
    - `required` string, required
    - `quote` string, nullable, required: The landlord's own sentence when the rule was read from prose; null when it came from a structured field (a stated fee, a form checkbox) and there is no sentence to quote. Never fabricated.
    - `quote_available` boolean, required
    - `source` object, required: Where this row came from and when we fetched it (same as the top-level source).

## Other responses

- `400`: Bad input — error says which field.
- `401`: No key / bad token.
- `403`: Key is fine but not for this: pending approval, revoked, scope missing, or an operation only the renter's own account may call.
- `404`: No such lead / hand-off / listing under this key.
- `409`: Conflict: the code is already registered.
- `429`: Rate limited; Retry-After in seconds.

---

[API](https://skmtc.dev/putroots/apis/putroots-api.md) · [All operations](https://skmtc.dev/putroots/apis/putroots-api/llms.txt) · [OpenAPI document](https://skmtc.dev/putroots/apis/putroots-api/revisions/a859d719878d?raw)
