Recipe catalog / fair-housing-wording
Flag applicant-preference wording in a listing
Does listing express a preference for, or limitation on, applicants based on personal characteristics rather than describing the property?
You need to screen rental or sale listings before publication for wording that steers, prefers, or excludes people by family status, religion, national origin, disability, or similar characteristics, so a human reviewer can look at the flagged ones.
Explore this recipe interactively ยท Source and implementation guide
Use fair-housing-wording in TypeScript
Install with npm install jev-recipes. Requires Node.js 22.9 or newer and ES modules. Set TYPESAFE_API_KEY in your server environment for live calls, which send input to TypeSafe and use API quota. See the installation guide.
import { fairHousingWording } from 'jev-recipes/fair-housing-wording';
const result = await fairHousingWording({
"listing": "Bright 1BR garden apartment on a quiet tree-lined street. Hardwood floors, updated kitchen, shared laundry in the basement, off-street parking for one car. $1,450/month, heat included. Perfect for a single professional or a quiet couple; not suitable for families with children. No smoking. Available October 1.",
"minConfidence": 0.8
});
console.log(result);
Input contract
| Field | Type | Needed |
|---|---|---|
| listing | string | Required |
| minConfidence | number | Optional |
Full input and result schemas
{
"input": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"listing": {
"type": "string"
},
"minConfidence": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"listing"
]
},
"result": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"model": {
"type": "string"
},
"usage": {
"type": "object",
"properties": {
"input_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"output_tokens": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"input_tokens",
"output_tokens"
],
"additionalProperties": false
},
"status": {
"type": "string",
"enum": [
"ready",
"review"
]
},
"probability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"verdict": {
"type": "string",
"enum": [
"flagged",
"clean"
]
}
},
"required": [
"model",
"usage",
"status",
"probability",
"confidence",
"verdict"
],
"additionalProperties": false
}
}Saved example result
This hand-authored response demonstrates the contract. It is not a model accuracy measurement. Run it without an API key: npx jev-recipes demo fair-housing-wording.
{
"model": "demo-fixture",
"usage": {
"input_tokens": 0,
"output_tokens": 0
},
"status": "ready",
"probability": 0.94,
"confidence": 0.94,
"verdict": "flagged"
}
Evaluation evidence
No verified live accuracy measurement is available. Evaluate representative cases before using this decision in your workflow.
Use the evaluation guide to measure this decision on your own labeled cases.
Limitations
- Judges wording only. Whether a phrase is unlawful depends on jurisdiction, exemptions, and context, so legal determinations belong to counsel and jurisdiction rules in application code.
- Flags statements about who should apply or live there, not neutral descriptions of the property, neighborhood, or nearby institutions.
- Does not detect discrimination that happens outside the listing text, such as in replies to inquiries or showing decisions.
Related recipes
- question-relevance: Use question-relevance to check whether a screening question asked of an applicant is pertinent, rather than whether listing copy itself expresses a preference.
- policy-severity: Use policy-severity to grade how serious a confirmed violation is against a supplied policy, rather than to detect the wording in the first place.