5. Response schemas
5.1 Bulk envelope — JsonLdGraphResponse
Returned when entityId resolves to a BusinessEntity.
| Field | Type | Notes |
|---|---|---|
@context | string | Always literal "https://schema.org". Hoisted from inner QAPages. |
@graph | array of QAPage | One entry per main entity and sub-entity. Ordered main-first, then sub-entities alphabetically. Inner QAPages omit @context. |
5.2 Bare envelope — JsonLdQaPageResponse
Returned when entityId resolves to a single entity.
| Field | Type | Notes |
|---|---|---|
@context | string | Always "https://schema.org" on a bare envelope. |
@type | string | Always "QAPage". |
identifier | string · nullable | The bonafide entity ID. Present on bare responses; omitted on inner @graph members. |
about | object · nullable | Subject of the QAPage. Always carries @type and name when present. Omitted when the entity has no resolvable name. |
mainEntity | array of Question · nullable | Each Question has exactly one acceptedAnswer of type Answer. Empty array if no FAQs are configured for the property. |
5.3 about.@type
| Prefix | Entity type | about.@type | Optional fields |
|---|---|---|---|
HO- | Hotel brand or hotel property | Hotel | url, propertyId |
propertyId is emitted only when the request includes ?includePropertyId=true (see §4) and the underlying Hotel record has a non-null otherKnownIds.propertyId. It is a JSON integer — partners should join on the numeric value, not its string representation. This is the field partners join against their reservations-system property keys in the CMS.
5.4 mainEntity[] — Question / Answer
{
"@type": "Question",
"name": "<the question, plain text>",
"acceptedAnswer": {
"@type": "Answer",
"text": "<the answer, plain text — server strips HTML>"
}
}Answer.textis plain text; any HTML markup from authoring is stripped server-side before serialization. If you need rendered HTML for on-page embedding, escape this string as you inject it into your template — do not assume safe HTML.- Each
Questionhas exactly oneacceptedAnswer. - Partners must parse leniently — additional optional fields may appear within
v3(see §10).
category is emitted only when the request includes ?includeCategory=true (see §4). It is a string whose value is the feature-type group name the question was drawn from — the same grouping the HTML and Markdown outputs render as headings. The key is positioned deterministically between @type and name, and is omitted entirely — never emitted as null or "" — when the flag is off or the group name is null or blank.