Skip to Content
Bonafide MCP is now generally available — read the quickstart
APIsResponse Schemas

5. Response schemas

5.1 Bulk envelope — JsonLdGraphResponse

Returned when entityId resolves to a BusinessEntity.

FieldTypeNotes
@contextstringAlways literal "https://schema.org". Hoisted from inner QAPages.
@grapharray of QAPageOne 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.

FieldTypeNotes
@contextstringAlways "https://schema.org" on a bare envelope.
@typestringAlways "QAPage".
identifierstring · nullableThe bonafide entity ID. Present on bare responses; omitted on inner @graph members.
aboutobject · nullableSubject of the QAPage. Always carries @type and name when present. Omitted when the entity has no resolvable name.
mainEntityarray of Question · nullableEach Question has exactly one acceptedAnswer of type Answer. Empty array if no FAQs are configured for the property.

5.3 about.@type

PrefixEntity typeabout.@typeOptional fields
HO-Hotel brand or hotel propertyHotelurl, 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.text is 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 Question has exactly one acceptedAnswer.
  • 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.

Last updated on