# Real Estate Schema > Compiles schema.org JSON-LD for real estate pages (agents, market reports, neighborhood guides, FAQs, open houses, help articles) and checks any JSON-LD or web page against a pinned schema.org release. Free to use. Engine version 0.4.0. Every API response carries it as the `X-Engine-Version` header and, in the body, as `engineVersion`: the same input can produce different output when it changes. ## API - [OpenAPI description](https://www.realestateschema.com/api/v1/openapi.json): every endpoint, request schema and error, as OpenAPI 3.1. Start here. - Send `POST` bodies as `application/json`, at most 1 MB. There are no API keys yet. Browsers on other origins are not allowed; servers and scripts are. - The host rate-limits by network address and answers 429 outside the API's JSON. Checking a URL is also limited by the API itself (429, `rate_limited`, with `Retry-After`); repeat offences wait longer, from 1 minute doubling up to an hour. Wait the full Retry-After, then retry. ### Check - `POST https://www.realestateschema.com/api/v1/validate`: body `{ "jsonLd": }`, `{ "url": "https://…" }`, or `{ "url", "domBlocks", "staticBlocks"? }` for a capture of the rendered page. Returns a lint report per JSON-LD document. A page that cannot be fetched is a 200 with `notes` and `fetchError`. ### Create Body: `{ "profile": , "input": , "options"?: }`. Returns `{ engineVersion, recipe, mode, jsonLd, lint }`. The profile, each recipe input and the options reject unknown keys and name them. - `POST https://www.realestateschema.com/api/v1/recipes/agent`: A profile page for one agent or team member: credentials, memberships, areas of expertise and the brokerage they work for. - `POST https://www.realestateschema.com/api/v1/recipes/article`: A market report or real estate article, with the licensed agent as author and the brokerage as publisher. - `POST https://www.realestateschema.com/api/v1/recipes/neighborhood`: A neighborhood or community guide that ties the place, its municipality and the agent's local expertise to the page. - `POST https://www.realestateschema.com/api/v1/recipes/faq`: A buyer-question or comparison page, structured as an FAQ with an optional comparison list. - `POST https://www.realestateschema.com/api/v1/recipes/open-house`: An open house, compiled to an Event with the property as its location and the agent as organizer. - `POST https://www.realestateschema.com/api/v1/recipes/help-article`: A help-center article from a provider that serves real-estate professionals, with optional step-by-step procedures. ### Errors A failure is always `{ "error": { "code", "message", "issues"? } }`. `code` is one of `invalid_request`, `invalid_json`, `unsupported_media_type`, `payload_too_large`, `unknown_recipe`, `rate_limited`, `internal_error`. For `invalid_request`, `issues` lists every problem as `{ part, path, code, message }`, where `part` is `request`, `profile`, `input` or `options` and `path` is dotted inside it. Fix all of them and resend. ## What the checker reports Each finding names a `rule`, a `severity` (error, warning, info), a `pointer` into the document and, where known, a `suggestion`. The result is `ok` when there are no errors. - `type-existence` (error, info): An `@type` that is not a schema.org class (error), is provisional at pending.schema.org (info), or is outside the schema.org namespace and not checked (info). - `property-existence` (error): A property name that does not exist in the pinned schema.org release. - `domain` (error): A property used on a type that schema.org does not allow it on. - `range` (error, warning): A property whose value is the wrong kind: a node where a literal is expected, a node of an unexpected type, or a literal where a node is expected. - `enumeration` (error, warning, info): A value that is not a member of the property's enumeration (error), a bare string that names no member (warning), or a member's bare name such as "Monday" where the full schema.org IRI is clearer (info). - `datatype` (warning): A literal that does not fit the property's datatype, such as a fractional Integer. - `id-resolution` (error, info): A reference to an `@id` that no node defines (error), an `@id` defined more than once with different content (error), the same `@id` written out identically more than once (info), or a reference treated as an external IRI (info). - `orphan` (warning): A node that no root node reaches, so a crawler walking the graph never finds it. - `self-reference` (warning): A node that names itself as its own parent, publisher, author or similar. - `duplicate-name` (warning, info): Several nodes with different `@id`s share one name, which search engines may merge or split unpredictably. A warning for competing organizations, otherwise info. - `credential-category` (warning): A `credentialCategory` that looks like a company name or an all-caps label, not a category. - `host-consistency` (warning, info): One site written with different hostnames (warning), or one page URL with and without a trailing slash (info). - `thin-entity` (info): A person cited as an author who carries no authority signal such as sameAs, image, credential or knowsAbout. - `image-host` (warning): An image hosted where it is hotlink-protected or its URL expires, so Googlebot may not fetch it. - `contact-placement` (info): A telephone or email on an organization that also sits on a person, or one shared by several people, so it is unclear whose it is. - `format` (warning, info): A value in a form machines have to guess at: a telephone not in E.164, upper case in a URL host, a country name instead of its code, TollFree on a number that isn't, a price or size written for people ("$2,145.00"), unitText with no unitCode, or a relative url or @id. - `event-timing` (warning): An Event that ends before it starts, or that has already happened but is still marked scheduled. - `markup-in-name` (warning): A `name` that contains markup characters (< or >). - `url-scheme` (warning): A URL property that holds a non-web address such as mailto: or tel:. - `postal-code-region` (warning): A postal code that belongs to a different state or province than the address's `addressRegion`. - `depth-limit` (error): JSON-LD nested more deeply than the checker will walk, so it was not checked. - `post-load-injected-schema` (warning): A schema type present in the rendered page but not in its HTML source, so it was added by JavaScript and some crawlers will not see it. - `text-quality` (warning): Text a reader can't use as written: an empty-string value, which reads as a value rather than "unknown", or mojibake (’) from a feed decoded with the wrong character set. - `empty-node` (warning): A nested node with a type and nothing else, such as an empty floorSize. - `identity` (warning, info): Who-is-who mistakes: an organization named after its domain, an organization named like a person with no Person linked, an agent or seller with no name or with the property's address, a licenseless RealEstateAgent that publishes software, a course or technical help (a provider typed as a brokerage), or one unit typed as a whole ApartmentComplex. - `listing-completeness` (warning, info): A RealEstateListing that says too little: no Offer, an Offer with no availability, no agent or brokerage, a description that only repeats the facts, a datePosted of today, or a city that disagrees with the listing's name. ## Pages - [Check](https://www.realestateschema.com/audit): run the checker in a browser. - [Create](https://www.realestateschema.com/builder): build JSON-LD from a form. - [License data](https://www.realestateschema.com/licenses): real estate license authorities for every US state and Canadian province, as [JSON](https://www.realestateschema.com/data/real-estate-licenses.json) and [CSV](https://www.realestateschema.com/data/real-estate-licenses.csv). - [The audit bot](https://www.realestateschema.com/bot): what fetches pages for a URL check, and how to block it in robots.txt.