Skip to content
Documentation
pozyskajpacjentaDocs

API referenceEntities

Get a post

GET/api/v1/posts/{slug}

Since
1.1.0
Auth
Bearer key
operationId
getPost

One published post with its content blocks and SEO fields. Responses are private to the key: Cache-Control: private, max-age=60, so cache them on your side for up to a minute.

Request

Send the clinic's key in Authorization: Bearer (see API keys).

Path parameters

  • slugstringrequired

    Slug of the post (lower-case letters, digits, hyphens).

curl "https://app.pozyskajpacjenta.pl/api/v1/posts/nowy-tomograf-3d" \
  -H "Authorization: Bearer $PP_API_KEY"
import { PozyskajPacjentaClient } from "@pozyskajpacjenta/sdk";

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

const { post } = await client.getPost("nowy-tomograf-3d");
<?php
$response = wp_remote_get(
    'https://app.pozyskajpacjenta.pl/api/v1/posts/nowy-tomograf-3d',
    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

200The post.

  • postPostDetailrequired

    The post.

    Fields (12)
    • idstringrequired

      Post id.

    • slugstringrequired

      Slug from the post's address.

    • pathstringrequired

      Path of the post page.

    • titlestringrequired

      Title.

    • excerptstring | null

      Excerpt for lists; null when empty.

    • coverMediaRef | null

      Cover image; null when none.

      Fields (8)
      • urlstringrequired

        Absolute address of the file.

      • focalXinteger | null

        Horizontal focal point in percent (0 to 100) to keep when cropping, e.g. as object-position.

      • focalYinteger | null

        Vertical focal point in percent (0 to 100).

      • altstring | null

        Alternative text; null when the clinic left it empty.

      • widthintegersince 1.4.0

        Width of the original in px (library files, when known), for width/height attributes without layout shift.

      • heightintegersince 1.4.0

        Height of the original in px.

      • aiGeneratedbooleansince 1.4.0

        The image was generated by AI: label it next to the image (e.g. in a caption).

      • captionstringsince 1.4.0

        Caption to show under the image.

    • publishedAtstring (date-time) | null

      Publication date, ISO 8601; null when unknown.

    • bodyBlocksBlock[]required

      Content blocks of the post.

      Fields of each item (3)
      • idstringrequired

        Block id, stable within the page.

      • typestringrequired

        Block type with its version, e.g. hero.v1, faq.v1.

      • propsobjectrequired

        The block's fields; their shape depends on type.

    • seoTitlestring | null

      Title for <title> when it differs from title; null otherwise.

    • seoDescriptionstring | null

      Meta description; null when empty.

    • ogImageMediaRef | null

      og:image of the post; null when none.

      Fields as in MediaRef above.

    • updatedAtstring (date-time)required

      Last change, ISO 8601.

A post (body trimmed to one paragraph)

{
  "post": {
    "id": "post_tomograf",
    "slug": "nowy-tomograf-3d",
    "path": "/aktualnosci/nowy-tomograf-3d",
    "title": "Nowy tomograf 3D już w klinice",
    "excerpt": "Od czerwca pełną diagnostykę implantologiczną wykonasz bez wychodzenia z gabinetu, nowy tomograf CBCT skraca planowanie leczenia do jednej wizyty.",
    "cover": null,
    "publishedAt": "2026-06-28T00:00:00.000Z",
    "bodyBlocks": [
      {
        "id": "post-tom-body",
        "type": "rich-text.v1",
        "props": {
          "variant": "narrow",
          "body": "Do tej pory część pacjentów musiała wykonywać tomografię w zewnętrznej pracowni i wracać do nas z płytą. Od czerwca cała diagnostyka odbywa się na miejscu: badanie trwa kilkanaście sekund, a wynik omawiamy od razu, na tej samej wizycie."
        }
      }
    ],
    "seoTitle": null,
    "seoDescription": "Klinika Wzorcowa zainwestowała w nowy tomograf CBCT: pełna diagnostyka 3D na miejscu, niższa dawka promieniowania i planowanie implantów na jednej wizycie.",
    "ogImage": null,
    "updatedAt": "2026-09-30T14:21:58.000Z"
  }
}

Errors

StatusWhen
401No Authorization header
401Unknown or rotated key
404No published treatment with this slug
429Over 120 requests in this minute

Branch on the status and code, never on the Polish error text. All statuses in Errors.

401 · No Authorization header
{
  "error": "missing Authorization: Bearer <klucz z panelu Ustawienia>"
}
401 · Unknown or rotated key
{
  "error": "invalid key"
}
404 · No published treatment with this slug
{
  "error": "nie znaleziono"
}
429 · Over 120 requests in this minute
{
  "error": "przekroczono limit 120 zapytań/min"
}

Rate limit

  • 120 requests per minute per key, shared by every endpoint.
  • Every response to a valid key carries RateLimit-Remaining and RateLimit-Reset; see Rate limits.

SDK method

client.getPost(slug: string): Promise<{ post: PostDetail }>

The TypeScript tab above uses it. Install and errors: TypeScript SDK.