Resolve a path
const url = 'https://api.ebitex.io/content/delivery/v1/path/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api.ebitex.io/content/delivery/v1/path/example \ --header 'Authorization: Bearer <token>'Returns whatever is published at a path. kind says what you got:
presentation: a page, with its Template, settings and bound component, plus the page’stitleandtitleSource, and itsclassificationwhen it has one: the ids of the categories the page was published in, each with all of its ancestors, so a site can say which categories a view was in without a second request. The member is absent for a page with no categories, and it holds ids only (a category’s name is read separately, because a rename should not need a republish).redirect: followtargetPathyourself. Chains are collapsed server-side, and a renamed page’s old path answers with a redirect to the new one.
Name the site with site (a root node id from /sites) or host (the hostname you serve the page under). On a site with locale addressing the locale comes from the address, so locale= is refused. A site that arranges its own languages refuses a locale it does not serve with 400 locale_not_in_site. resolve sets how many levels of references are expanded into content, and ctx carries the visitor context used for personalization.
With an X-Ebitex-Preview-Session header, the page being previewed answers with its draft and X-Ebitex-Preview: draft; every other path answers what is published.
annotate=true adds a preview object to a draft answer, naming the entity and fields each part of the page came from — what a server-rendered site emits so the preview script can draw pins and click-to-edit. It is ignored, not refused, on anything answered as published, so one request shape serves both.
Audiences. Audiences are never read from ctx: a request that sends audiences there is refused with 400 audiences_not_in_ctx. Send the signed audience token from POST /audience/delivery/v1/resolve in the X-Ebitex-Audiences header instead (the SDKs do). A variant on an audience is delivered only to a token that grants it; with no token, or one that is malformed, tampered with, for another organization or expired, you get the default as for a visitor in no audiences. An expired or invalid token also sets the X-Ebitex-Audiences-Status response header so a client can renew.
Gated pages. A page, section or site can be restricted to an audience. Such a page is never returned to a visitor whose token does not grant it. Every response that depends on a token, and every response about a gated page (the page itself or the 403 below), is Cache-Control: private, no-store, so keep it out of shared caches.
Key: a delivery key (content.delivery.read).
Authorizations
Section titled “Authorizations”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “ Responses ”OK
locale_not_addressable: the site takes its locale from the address. validation_failed: an unsupported parameter value. audiences_not_in_ctx: ctx carries audiences. preview_raw_unsupported: raw=true with a preview session.
missing_api_key or invalid_api_key: no key was sent, or it is unknown, revoked or expired.
key_realm_mismatch: the key is limited to one realm and this site belongs to a realm outside it. A key with no realm serves every site; one with a realm serves the sites that realm and the realms below it own. preview_site_mismatch: the path is in a different site from the page being previewed. members_only: the page is restricted and the request carries no valid claim for its audience (or one without the verification the audience requires). The body is { "error": "members_only", "gate": { "audienceId", "access": "verified" | "open", "door": { "kind": "signIn" | "form" | "none", "formId"? } }, "unlock": { … } }, where unlock is the Experience to show instead (resolved like any page, in the request’s locale) or { "kind": "builtin", "heading", "message", "doorLabel" } when none is chosen. It never contains the withheld page.
scope_denied: the key lacks this route’s scope. origin_denied or ip_denied: a browser-safe key was used from an origin or address outside its restrictions. app_not_available: Content is not enabled for the organization.
path_not_found: nothing is published at this path. site_not_found: no site matches site or host.
Quota exceeded; Retry-After says how long to wait. too_many_failed_authentications: too many bad keys from this address.