# Get a page and its site

`GET https://app.pozyskajpacjenta.pl/api/v1/content` · operationId `getContent` · since 1.0.0 · tag Content

The page at a path together with the site it belongs to: everything a frontend needs to render that page. `page.kind` tells a page built from blocks from the eight entity pages. Responses are private to the key: `Cache-Control: private, max-age=60`, so cache them on your side for up to a minute.

## Request

Authorization: `Bearer <the clinic's key>`.

### Query parameters

- `path` (`string`): Path of the page on the clinic's site.

### cURL

```bash
curl "https://app.pozyskajpacjenta.pl/api/v1/content?path=/" \
  -H "Authorization: Bearer $PP_API_KEY"
```

### TypeScript

```ts
import { PozyskajPacjentaClient } from "@pozyskajpacjenta/sdk";

const client = new PozyskajPacjentaClient({
  apiKey: process.env.PP_API_KEY ?? "",
  baseUrl: "https://app.pozyskajpacjenta.pl",
});

const { site, page } = await client.getContent("/rezerwacja");
```

### PHP

```php
<?php
$response = wp_remote_get(
    'https://app.pozyskajpacjenta.pl/api/v1/content?path=/',
    array(
        'headers' => array( 'Authorization' => 'Bearer ' . getenv( 'PP_API_KEY' ) ),
        'timeout' => 10,
    )
);
if ( is_wp_error( $response ) ) {
    error_log( $response->get_error_message() );
    return;
}
$status = wp_remote_retrieve_response_code( $response );
$data   = json_decode( wp_remote_retrieve_body( $response ), true );
```

## Response

### 200: The site and the page.

- `site` (`Site`, required): The clinic's site.
  - `name` (`string`, required): Name of the clinic as shown on the site.
  - `primaryDomain` (`string | null`): The site's main domain; null before a domain is connected.
  - `menu` (`MenuItem[]`, required): The main menu, in order.
    - `label` (`string`, required): Text of the menu item.
    - `path` (`string`, required): Path on the clinic's site, e.g. /zabiegi.
  - `theme` (`ThemeTokens`, required): Theme tokens of the site.
  - `profile` (`SiteProfile | null`, required, since 1.4.0): The clinic profile; null until the clinic fills it in.
    - `legalName` (`string`): Registered name of the entity that runs the clinic.
    - `phone` (`string`): Phone number for display, e.g. +48 22 100 20 30. For a tel: link keep the digits and the +.
    - `email` (`string (email)`): The clinic's contact e-mail.
    - `address` (`SiteAddress`): The clinic's address.
      - `street` (`string`, required): Street and number.
      - `postalCode` (`string`, required): Postal code, 00-000.
      - `city` (`string`, required): City.
      - `district` (`string`): District, e.g. Mokotów.
      - `accessNote` (`string`): How to get in: entrance, floor, parking, lift.
    - `geo` (`object`): Map point of the clinic.
      - `lat` (`number`, required): Latitude.
      - `lng` (`number`, required): Longitude.
    - `openingHours` (`OpeningHours`): Opening hours per weekday.
      - `mon` (`OpeningInterval[]`): Monday's intervals.
        - `opens` (`string`, required): Opening time, HH:MM.
        - `closes` (`string`, required): Closing time, HH:MM, later than `opens`.
      - `tue` (`OpeningInterval[]`): Tuesday's intervals.
        - fields as in `OpeningInterval` above
      - `wed` (`OpeningInterval[]`): Wednesday's intervals.
        - fields as in `OpeningInterval` above
      - `thu` (`OpeningInterval[]`): Thursday's intervals.
        - fields as in `OpeningInterval` above
      - `fri` (`OpeningInterval[]`): Friday's intervals.
        - fields as in `OpeningInterval` above
      - `sat` (`OpeningInterval[]`): Saturday's intervals.
        - fields as in `OpeningInterval` above
      - `sun` (`OpeningInterval[]`): Sunday's intervals.
        - fields as in `OpeningInterval` above
    - `openingHoursNote` (`string`): Note shown next to the hours, e.g. until when the phone is answered.
    - `nfz` (`object`): Contract with the National Health Fund (NFZ).
      - `contract` (`boolean`, required): true when the clinic has an NFZ contract.
      - `note` (`string`): Note about the NFZ contract, e.g. which services it covers.
    - `payments` (`object`): Accepted payment methods.
      - `methods` (`string[]`, required): Payment methods as the clinic names them, e.g. gotówka, karta, BLIK.
      - `note` (`string`): Note about payments, e.g. instalments.
    - `socials` (`object[]`): Links to the clinic's profiles elsewhere.
      - `network` (`string`, required): The network. One of `facebook`, `instagram`, `youtube`, `tiktok`, `linkedin`, `x`, `google`, `znanylekarz`, `other`.
      - `url` (`string`, required): Profile address (https://).
    - `logo` (`MediaRef | null`): Logo; null when the file was removed from the media library.
      - `url` (`string`, required): Absolute address of the file.
      - `focalX` (`integer | null`): Horizontal focal point in percent (0 to 100) to keep when cropping, e.g. as object-position.
      - `focalY` (`integer | null`): Vertical focal point in percent (0 to 100).
      - `alt` (`string | null`): Alternative text; null when the clinic left it empty.
      - `width` (`integer`, since 1.4.0): Width of the original in px (library files, when known), for width/height attributes without layout shift.
      - `height` (`integer`, since 1.4.0): Height of the original in px.
      - `aiGenerated` (`boolean`, since 1.4.0): The image was generated by AI: label it next to the image (e.g. in a caption).
      - `caption` (`string`, since 1.4.0): Caption to show under the image.
    - `logoInverse` (`MediaRef | null`): Logo for dark backgrounds.
      - fields as in `MediaRef` above
    - `favicon` (`MediaRef | null`): Favicon file.
      - fields as in `MediaRef` above
    - `defaultOgImage` (`MediaRef | null`): og:image for pages that have none of their own.
      - fields as in `MediaRef` above
    - `registry` (`object`): Registry numbers. Show only the ones that are set.
      - `rpwdl` (`string`): Number in the register of medical entities (RPWDL).
      - `nip` (`string`): Tax identification number (NIP).
      - `regon` (`string`): Statistical number (REGON).
      - `krs` (`string`): Court register number (KRS).
    - `privacy` (`object`, since 1.7.0): Data for the privacy policy and the information clause. The controller is `legalName` with the address and the `registry` numbers. Full policy text: GET /privacy.
      - `contactEmail` (`string (email)`, since 1.7.0): E-mail for personal-data requests; the clinic's `email` when unset.
      - `registeredOffice` (`string`, since 1.7.0): The controller's registered office, when it differs from the clinic address.
      - `dpoName` (`string`, since 1.7.0): Data protection officer, when one is appointed.
      - `dpoEmail` (`string (email)`, since 1.7.0): The data protection officer's e-mail.
    - `reviewsPolicy` (`string`): How the clinic collects and checks the reviews it shows on its site.
    - `demoNotice` (`string`): A notice for every page (e.g. a demo site). Show it when present.
  - `noindex` (`boolean`, since 1.5.0): true: the site stays out of search engines (a demo, or before launch). Add meta robots noindex to every page (ideally also the header X-Robots-Tag: noindex) and publish no sitemap. Keep robots.txt open (`Allow: /`, no Sitemap line): a crawler has to fetch the pages to see the noindex and drop URLs it indexed before.
- `page` (`ContentPage`, required): The page at `path`.
  - kind: "page": A page built from blocks in the clinic's page editor.
    - `kind` (`string`, required): Always `page`. One of `page`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `seoTitle` (`string | null`): Title for <title> when it differs from `title`; null otherwise.
    - `seoDescription` (`string | null`): Meta description; null when empty.
    - `blocks` (`Block[]`, required): The page's content blocks, in order.
      - `id` (`string`, required): Block id, stable within the page.
      - `type` (`string`, required): Block type with its version, e.g. hero.v1, faq.v1.
      - `props` (`object`, required): The block's fields; their shape depends on `type`.
  - kind: "services": The treatments index (/zabiegi).
    - `kind` (`string`, required): Always `services`. One of `services`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - `label` (`string`, required): Text of the step.
      - `href` (`string | null`): Path of the step; null for the current page.
    - `cta` (`Cta`, required): The page's one call to action.
      - `label` (`string`, required): Button text.
      - `href` (`string`, required): Link target: tel:… or a path on the clinic's site.
    - `eyebrow` (`string`): Short label above the title.
    - `lead` (`string | null`): Paragraph under the title; null when the clinic left it empty.
    - `services` (`ServiceSummary[]`, required): Published treatments, in the clinic's order.
      - `id` (`string`, required): Treatment id.
      - `slug` (`string`, required): Slug from the treatment's address.
      - `path` (`string`, required): Path on the clinic's site, e.g. /zabiegi/implanty.
      - `name` (`string`, required): Treatment name.
      - `category` (`string | null`): Category the clinic groups the treatment under; null when none.
      - `shortDesc` (`string | null`): One-sentence description for lists; null when empty.
      - `priceFromLabel` (`string | null`): Price label, e.g. od 290 zł; null when the clinic shows no price.
      - `durationLabel` (`string | null`): Duration label, e.g. zabieg 60 min; null when empty.
      - `bookingServiceId` (`string | null`, required, since 1.3.0): Id of the active booking service this treatment is booked as: an entry of GET /booking/catalog and the `service` parameter of /booking/slots. null when the treatment is not linked to booking or the linked service is inactive.
  - kind: "service": A treatment page (/zabiegi/{slug}).
    - `kind` (`string`, required): Always `service`. One of `service`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `service` (`ServiceDetail`, required): The treatment.
      - `id` (`string`, required): Treatment id.
      - `slug` (`string`, required): Slug from the treatment's address.
      - `path` (`string`, required): Path on the clinic's site, e.g. /zabiegi/implanty.
      - `name` (`string`, required): Treatment name.
      - `category` (`string | null`): Category the clinic groups the treatment under; null when none.
      - `shortDesc` (`string | null`): One-sentence description for lists; null when empty.
      - `priceFromLabel` (`string | null`): Price label, e.g. od 290 zł; null when the clinic shows no price.
      - `durationLabel` (`string | null`): Duration label, e.g. zabieg 60 min; null when empty.
      - `bookingServiceId` (`string | null`, required, since 1.3.0): Id of the active booking service this treatment is booked as: an entry of GET /booking/catalog and the `service` parameter of /booking/slots. null when the treatment is not linked to booking or the linked service is inactive.
      - `hero` (`MediaRef | null`): Main image of the treatment page; null when none.
        - fields as in `MediaRef` above
      - `bodyBlocks` (`Block[]`, required): Content blocks of the treatment page.
        - fields as in `Block` above
      - `faq` (`object[]`, required): Questions and answers about the treatment.
        - `question` (`string`, required): The question.
        - `answer` (`string`, required): The answer, plain text.
      - `related` (`RelatedService[]`, required): Other published treatments the clinic links from this one.
        - `id` (`string`, required): Treatment id.
        - `slug` (`string`, required): Treatment slug.
        - `path` (`string`, required): Path of the treatment page.
        - `name` (`string`, required): Treatment name.
        - `priceFromLabel` (`string | null`): Price label, e.g. od 290 zł; null when the clinic shows no price.
      - `updatedAt` (`string (date-time)`, required): Last change, ISO 8601.
  - kind: "team": The team page (/zespol).
    - `kind` (`string`, required): Always `team`. One of `team`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `eyebrow` (`string`): Short label above the title.
    - `lead` (`string | null`): Paragraph under the title; null when the clinic left it empty.
    - `doctors` (`DoctorSummary[]`, required): Published team members, in the clinic's order.
      - `id` (`string`, required): Team member id.
      - `slug` (`string`, required): Slug from the profile's address.
      - `path` (`string`, required): Path of the profile page.
      - `name` (`string`, required): Full name.
      - `title` (`string | null`): Professional title, e.g. lek. dent.; null when none.
      - `specializations` (`string[]`, required): Specialisations, in the clinic's order.
      - `photo` (`MediaRef | null`): Portrait; null when none.
        - fields as in `MediaRef` above
      - `bookingResourceId` (`string | null`, required, since 1.3.0): Id of the active booking specialist for this profile: an entry of GET /booking/catalog and the `resource` parameter of /booking/slots. null when the profile is not linked to booking or the specialist is inactive.
  - kind: "doctor": A team member's profile page (/zespol/{slug}).
    - `kind` (`string`, required): Always `doctor`. One of `doctor`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `doctor` (`DoctorDetail`, required): The team member.
      - `id` (`string`, required): Team member id.
      - `slug` (`string`, required): Slug from the profile's address.
      - `path` (`string`, required): Path of the profile page.
      - `name` (`string`, required): Full name.
      - `title` (`string | null`): Professional title, e.g. lek. dent.; null when none.
      - `specializations` (`string[]`, required): Specialisations, in the clinic's order.
      - `photo` (`MediaRef | null`): Portrait; null when none.
        - fields as in `MediaRef` above
      - `bookingResourceId` (`string | null`, required, since 1.3.0): Id of the active booking specialist for this profile: an entry of GET /booking/catalog and the `resource` parameter of /booking/slots. null when the profile is not linked to booking or the specialist is inactive.
      - `bio` (`string | null`): Biography, plain text with blank lines between paragraphs; null when empty.
      - `updatedAt` (`string (date-time)`, required): Last change, ISO 8601.
    - `services` (`RelatedService[]`, required): Up to 6 of the clinic's treatments shown on the profile.
      - fields as in `RelatedService` above
  - kind: "case-studies": The case studies index (/realizacje).
    - `kind` (`string`, required): Always `case-studies`. One of `case-studies`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `eyebrow` (`string`): Short label above the title.
    - `lead` (`string | null`): Paragraph under the title; null when the clinic left it empty.
    - `caseStudies` (`CaseStudySummary[]`, required): Published case studies, newest first.
      - `id` (`string`, required): Case study id.
      - `slug` (`string`, required): Slug from the case study's address.
      - `path` (`string`, required): Path of the case study page.
      - `title` (`string`, required): Title.
      - `summary` (`string | null`): Short summary; null when empty.
      - `image` (`MediaRef | null`): List image; null when none.
        - fields as in `MediaRef` above
      - `publishedAt` (`string (date-time) | null`): Publication date, ISO 8601; null when unknown.
  - kind: "case-study": A case study page (/realizacje/{slug}).
    - `kind` (`string`, required): Always `case-study`. One of `case-study`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `caseStudy` (`CaseStudyDetail`, required): The case study.
      - `id` (`string`, required): Case study id.
      - `slug` (`string`, required): Slug from the case study's address.
      - `path` (`string`, required): Path of the case study page.
      - `title` (`string`, required): Title.
      - `summary` (`string | null`): Short summary; null when empty.
      - `before` (`MediaRef | null`): Image before the treatment; null when none.
        - fields as in `MediaRef` above
      - `after` (`MediaRef | null`): Image after the treatment; null when none.
        - fields as in `MediaRef` above
      - `bodyBlocks` (`Block[]`, required): Content blocks of the case study.
        - fields as in `Block` above
      - `services` (`RelatedService[]`, required): Treatments linked to the case study (published ones only).
        - fields as in `RelatedService` above
      - `publishedAt` (`string (date-time) | null`): Publication date, ISO 8601; null when unknown.
      - `updatedAt` (`string (date-time)`, required): Last change, ISO 8601.
  - kind: "posts": The posts index (/aktualnosci).
    - `kind` (`string`, required): Always `posts`. One of `posts`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `eyebrow` (`string`): Short label above the title.
    - `posts` (`PostSummary[]`, required): Published posts, newest first.
      - `id` (`string`, required): Post id.
      - `slug` (`string`, required): Slug from the post's address.
      - `path` (`string`, required): Path of the post page.
      - `title` (`string`, required): Title.
      - `excerpt` (`string | null`): Excerpt for lists; null when empty.
      - `cover` (`MediaRef | null`): Cover image; null when none.
        - fields as in `MediaRef` above
      - `publishedAt` (`string (date-time) | null`): Publication date, ISO 8601; null when unknown.
  - kind: "post": A post page (/aktualnosci/{slug}).
    - `kind` (`string`, required): Always `post`. One of `post`.
    - `path` (`string`, required): Path of the page on the clinic's site.
    - `title` (`string`, required): Page title (the h1 and the <title>).
    - `breadcrumbs` (`Crumb[]`, required): Breadcrumb trail from the home page to this page.
      - fields as in `Crumb` above
    - `cta` (`Cta`, required): The page's one call to action.
      - fields as in `Cta` above
    - `post` (`PostDetail`, required): The post.
      - `id` (`string`, required): Post id.
      - `slug` (`string`, required): Slug from the post's address.
      - `path` (`string`, required): Path of the post page.
      - `title` (`string`, required): Title.
      - `excerpt` (`string | null`): Excerpt for lists; null when empty.
      - `cover` (`MediaRef | null`): Cover image; null when none.
        - fields as in `MediaRef` above
      - `publishedAt` (`string (date-time) | null`): Publication date, ISO 8601; null when unknown.
      - `bodyBlocks` (`Block[]`, required): Content blocks of the post.
        - fields as in `Block` above
      - `seoTitle` (`string | null`): Title for <title> when it differs from `title`; null otherwise.
      - `seoDescription` (`string | null`): Meta description; null when empty.
      - `ogImage` (`MediaRef | null`): og:image of the post; null when none.
        - fields as in `MediaRef` above
      - `updatedAt` (`string (date-time)`, required): Last change, ISO 8601.

Example (A page built from blocks (kind: page)):

```json
{
  "site": {
    "name": "Klinika Wzorcowa",
    "primaryDomain": "wzorcowa.pozyskajpacjenta.pl",
    "menu": [
      {
        "label": "Strona główna",
        "path": "/"
      },
      {
        "label": "Zabiegi",
        "path": "/zabiegi"
      },
      {
        "label": "Zespół",
        "path": "/zespol"
      },
      {
        "label": "Rezerwacja",
        "path": "/rezerwacja"
      }
    ],
    "theme": {
      "version": 1,
      "colors": {
        "background": "#faf7f1",
        "foreground": "#211d18",
        "surface": "#fffdf9",
        "surface2": "#f3ede1",
        "muted": "#f1eadb",
        "mutedForeground": "#655c4e",
        "primary": "#7a5c2e",
        "primaryForeground": "#fffdf9",
        "accent": "#2c2a25",
        "accentForeground": "#f5efe2",
        "border": "#e3dac7"
      },
      "colorsDark": {
        "background": "#171310",
        "foreground": "#f2ecdf",
        "surface": "#201b15",
        "surface2": "#2a241b",
        "muted": "#242017",
        "mutedForeground": "#b5aa93",
        "primary": "#d3ab63",
        "primaryForeground": "#231b0e",
        "accent": "#ece0c6",
        "accentForeground": "#1c1712",
        "border": "#3a3326"
      },
      "radius": "0.375rem",
      "radiusPill": "9999px",
      "fontSans": "\"Inter\", \"Inter Fallback\", system-ui, sans-serif",
      "fontHeading": "\"Fraunces\", \"Fraunces Fallback\", Georgia, serif",
      "type": {
        "baseMinPx": 16,
        "baseMaxPx": 17.5,
        "ratioMin": 1.18,
        "ratioMax": 1.3,
        "headingWeight": 560,
        "bodyWeight": 400,
        "headingLineHeight": 1.04,
        "bodyLineHeight": 1.62,
        "headingTracking": -0.012
      },
      "rhythm": {
        "sectionYMinRem": 5,
        "sectionYMaxRem": 10,
        "container": "76rem"
      },
      "elevation": {
        "shadowColor": "#2a2114",
        "strength": 0.16
      },
      "motion": {
        "durationFastMs": 180,
        "durationBaseMs": 340,
        "durationSlowMs": 750,
        "easeOut": "cubic-bezier(0.22, 1, 0.36, 1)",
        "easeSpring": "cubic-bezier(0.32, 1.2, 0.6, 1)"
      },
      "imagery": {
        "overlayColor": "#1a1208",
        "overlayOpacity": 0.5,
        "imageRadius": "0.375rem"
      }
    },
    "profile": {
      "legalName": "Klinika Wzorcowa sp. z o.o.",
      "phone": "+48 22 100 20 30",
      "email": "recepcja@klinika-wzorcowa.example",
      "address": {
        "street": "ul. Przykładowa 12",
        "postalCode": "00-950",
        "city": "Warszawa",
        "district": "Mokotów",
        "accessNote": "Wejście od podwórza, parter, winda."
      },
      "geo": {
        "lat": 52.1935,
        "lng": 21.0346
      },
      "openingHours": {
        "mon": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "tue": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "wed": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "thu": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "fri": [
          {
            "opens": "08:00",
            "closes": "16:00"
          }
        ],
        "sat": [
          {
            "opens": "09:00",
            "closes": "14:00"
          }
        ]
      },
      "openingHoursNote": "Rejestracja telefoniczna do 19:00.",
      "nfz": {
        "contract": false
      },
      "payments": {
        "methods": [
          "gotówka",
          "karta",
          "BLIK"
        ]
      }
    },
    "noindex": false
  },
  "page": {
    "kind": "page",
    "path": "/rezerwacja",
    "title": "Rezerwacja wizyty",
    "seoTitle": null,
    "seoDescription": "Zarezerwuj wizytę w Klinice Wzorcowej online: wybierz zabieg, lekarza i wolny termin.",
    "blocks": [
      {
        "id": "fw-nav",
        "type": "nav.v1",
        "props": {
          "variant": "with-cta",
          "brandName": "Klinika Wzorcowa",
          "links": [],
          "ctaLabel": "Umów wizytę",
          "ctaHref": "/rezerwacja"
        }
      },
      {
        "id": "fw-rez-hero",
        "type": "hero.v1",
        "props": {
          "variant": "centered",
          "eyebrow": "Rezerwacja online",
          "heading": "Wybierz termin, który Ci pasuje",
          "subheading": "Kalendarz pokazuje wyłącznie realnie wolne terminy. Potwierdzenie i link do zmiany rezerwacji dostaniesz e-mailem od razu."
        }
      }
    ]
  }
}
```

Example (An entity page (kind: services)):

```json
{
  "site": {
    "name": "Klinika Wzorcowa",
    "primaryDomain": "wzorcowa.pozyskajpacjenta.pl",
    "menu": [
      {
        "label": "Strona główna",
        "path": "/"
      },
      {
        "label": "Zabiegi",
        "path": "/zabiegi"
      },
      {
        "label": "Zespół",
        "path": "/zespol"
      },
      {
        "label": "Rezerwacja",
        "path": "/rezerwacja"
      }
    ],
    "theme": {
      "version": 1,
      "colors": {
        "background": "#faf7f1",
        "foreground": "#211d18",
        "surface": "#fffdf9",
        "surface2": "#f3ede1",
        "muted": "#f1eadb",
        "mutedForeground": "#655c4e",
        "primary": "#7a5c2e",
        "primaryForeground": "#fffdf9",
        "accent": "#2c2a25",
        "accentForeground": "#f5efe2",
        "border": "#e3dac7"
      },
      "colorsDark": {
        "background": "#171310",
        "foreground": "#f2ecdf",
        "surface": "#201b15",
        "surface2": "#2a241b",
        "muted": "#242017",
        "mutedForeground": "#b5aa93",
        "primary": "#d3ab63",
        "primaryForeground": "#231b0e",
        "accent": "#ece0c6",
        "accentForeground": "#1c1712",
        "border": "#3a3326"
      },
      "radius": "0.375rem",
      "radiusPill": "9999px",
      "fontSans": "\"Inter\", \"Inter Fallback\", system-ui, sans-serif",
      "fontHeading": "\"Fraunces\", \"Fraunces Fallback\", Georgia, serif",
      "type": {
        "baseMinPx": 16,
        "baseMaxPx": 17.5,
        "ratioMin": 1.18,
        "ratioMax": 1.3,
        "headingWeight": 560,
        "bodyWeight": 400,
        "headingLineHeight": 1.04,
        "bodyLineHeight": 1.62,
        "headingTracking": -0.012
      },
      "rhythm": {
        "sectionYMinRem": 5,
        "sectionYMaxRem": 10,
        "container": "76rem"
      },
      "elevation": {
        "shadowColor": "#2a2114",
        "strength": 0.16
      },
      "motion": {
        "durationFastMs": 180,
        "durationBaseMs": 340,
        "durationSlowMs": 750,
        "easeOut": "cubic-bezier(0.22, 1, 0.36, 1)",
        "easeSpring": "cubic-bezier(0.32, 1.2, 0.6, 1)"
      },
      "imagery": {
        "overlayColor": "#1a1208",
        "overlayOpacity": 0.5,
        "imageRadius": "0.375rem"
      }
    },
    "profile": {
      "legalName": "Klinika Wzorcowa sp. z o.o.",
      "phone": "+48 22 100 20 30",
      "email": "recepcja@klinika-wzorcowa.example",
      "address": {
        "street": "ul. Przykładowa 12",
        "postalCode": "00-950",
        "city": "Warszawa",
        "district": "Mokotów",
        "accessNote": "Wejście od podwórza, parter, winda."
      },
      "geo": {
        "lat": 52.1935,
        "lng": 21.0346
      },
      "openingHours": {
        "mon": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "tue": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "wed": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "thu": [
          {
            "opens": "08:00",
            "closes": "20:00"
          }
        ],
        "fri": [
          {
            "opens": "08:00",
            "closes": "16:00"
          }
        ],
        "sat": [
          {
            "opens": "09:00",
            "closes": "14:00"
          }
        ]
      },
      "openingHoursNote": "Rejestracja telefoniczna do 19:00.",
      "nfz": {
        "contract": false
      },
      "payments": {
        "methods": [
          "gotówka",
          "karta",
          "BLIK"
        ]
      }
    },
    "noindex": false
  },
  "page": {
    "kind": "services",
    "path": "/zabiegi",
    "title": "Zabiegi i usługi",
    "eyebrow": "Zabiegi",
    "lead": "Pełen zakres leczenia w naszej klinice, poznaj przebieg, ceny i odpowiedzi na najczęstsze pytania.",
    "breadcrumbs": [
      {
        "label": "Strona główna",
        "href": "/"
      },
      {
        "label": "Zabiegi"
      }
    ],
    "cta": {
      "label": "Zadzwoń i umów wizytę",
      "href": "tel:+48221002030"
    },
    "services": [
      {
        "id": "svc_konsultacja",
        "slug": "konsultacja-stomatologiczna",
        "name": "Konsultacja stomatologiczna",
        "category": "Diagnostyka",
        "shortDesc": "Przegląd jamy ustnej, diagnoza i plan leczenia z wyceną na piśmie, punkt startowy każdego leczenia.",
        "priceFromLabel": "200 zł",
        "durationLabel": "wizyta 30 min",
        "bookingServiceId": "bsvc_konsultacja",
        "path": "/zabiegi/konsultacja-stomatologiczna"
      },
      {
        "id": "svc_impl",
        "slug": "konsultacja-implantologiczna",
        "name": "Konsultacja implantologiczna z tomografią 3D",
        "category": "Implantologia",
        "shortDesc": "Tomografia CBCT, ocena warunków kostnych i kompletny plan odbudowy implantologicznej na jednej wizycie.",
        "priceFromLabel": "350 zł",
        "durationLabel": "wizyta 45 min",
        "bookingServiceId": "bsvc_impl",
        "path": "/zabiegi/konsultacja-implantologiczna"
      }
    ]
  }
}
```

## Errors

| Status | code | When |
| --- | --- | --- |
| 401 |  | No Authorization header |
| 401 |  | Unknown or rotated key |
| 404 |  | No published page at this path |
| 404 |  | The clinic's site is not published |
| 429 |  | Over 120 requests in this minute |

401 (No Authorization header):

```json
{
  "error": "missing Authorization: Bearer <klucz z panelu Ustawienia>"
}
```

401 (Unknown or rotated key):

```json
{
  "error": "invalid key"
}
```

404 (No published page at this path):

```json
{
  "error": "page not found"
}
```

404 (The clinic's site is not published):

```json
{
  "error": "site not published"
}
```

429 (Over 120 requests in this minute):

```json
{
  "error": "przekroczono limit 120 zapytań/min"
}
```

## Rate limit

- 120 requests per minute per key, shared by every endpoint.

## SDK method

`client.getContent(path?: string): Promise<SiteContent>`
