Skip to content
Documentation
pozyskajpacjentaDocs

Resources

Changelog

Every version of API v1 and of the TypeScript SDK, newest first. Changes that tighten behaviour are marked as a behaviour change.

API v1

  1. 1.29.0

    • AddedGET /content: every block of a page carries style.tone, the surface the section stands on: base, soft, contrast or brand. The clinic's own site alternates base and soft down the page unless the clinic chose a tone for a section; the colours of a tone follow from the theme tokens.getContent
    • AddedNew block contact.v1: the clinic's address with the way in, phone, e-mail and opening hours (days with the same hours in one row), with a map (variant: map) or without (columns). It arrives filled from the clinic's data unless fromClinic is false.getContent
    • ChangedGET /content: a sub-page's nav.v1 and footer.v1 with fromHome: true arrive with the home page's content, so a site has one menu bar and one footer; without the flag they are the page's own, as before.getContent
  2. 1.28.1

    • ChangedGET /process: the value of setupHref names the panel screen that sets the action today: for an SMS, Kanały wiadomości while it waits for the clinic's SMS account (needs_setup, its stateReason says the same), otherwise Powiadomienia, where it is switched on; Rezerwacja online for a booking rule. Same fields, same types; the old addresses still lead there.getProcess
  3. 1.28.0

    • AddedGET /redirects: the old addresses the clinic's site serves now and where each leads, chains flattened. A sub-page whose address changes in the clinic's panel leaves one behind, so a frontend of its own can answer the old address instead of a 404.listRedirects
    • AddedGET /pages items of type page carry seoTitle and seoDescription, the title and description for search engines as the clinic set them.listPages
  4. 1.27.0

    • AddedBlock props team-grid.v1 fromTeam and pricing.v1 / services-grid.v1 fromServices: the section takes its people or treatments from the clinic's data when it is shown. GET /content and the bodyBlocks of a treatment, a case study and a post answer such a section filled (members, items: at least one, as before), so a frontend that does not know the new props draws what the clinic's site draws; a section with nothing to show is not in the list.getContentgetServicegetCaseStudygetPost
  5. 1.26.2

  6. 1.26.1

    • ChangedConversationMessage.status queued: a reply from the clinic's panel held on the server for a few seconds before it leaves. It may still vanish from the conversation when the person takes it back, and a message taken back is in no answer of the API. A message sent through the API is never held. No new enum value.listMessagessendMessage
  7. 1.26.0

    • AddedSiteProfile.vocabulary: the word family of the clinic's site on the platform, medical (dental and medical practices), optical (an optician's shop), vet or business (any other business that is not a healthcare entity), so an own frontend uses the same words and schema.org types as the clinic's site. medical is also the answer when the platform knows nothing about the business (no specialty or entity kind), so do not take it as a decision about the vertical.getSitegetContent
  8. 1.25.0

    • AddedKey scope case_studies:write: the clinic's own AI assistant, connected with the clinic's key, creates and edits case-study drafts only with it; listing the case studies needs no scope. Every key that existed on 2026-10-23 holds it, so nothing stops working; a clinic grants or takes it away in Ustawienia › Integracje › Klucz API. It is a new value of ConversationError.scope, which no conversation endpoint returns.
  9. 1.24.0

    • AddedGET /process: the clinic's patient process from the enquiry to the next visit, six steps with their actions (who, channels, timing, the SMS text or what an e-mail holds) and their state, read only. 403 with the code feature_disabled until the clinic has the patient process switched on.getProcess
  10. 1.23.1

    • Behaviour changependingUntil of a pending visit never falls after its startAt: the clinic's confirmation window ends at the latest an hour before the visit (a visit booked closer than that still leaves at least 15 minutes, never past its start), and a payment window closes before the visit starts. A visit too close for an online payment (less than Stripe's minimum Checkout window before it) is booked without one, so it waits for the clinic's confirmation. Before, a 24-hour confirmation window could end after the visit itself.createAppointmentlistAppointments
  11. 1.23.0

    • AddedBlock props of the patient's booking and forms on a phone: booking.v1 backLabel (the accessible name of the details step's back control), requestSubmitLabel (the button of a service the clinic confirms), addToCalendarLabel and doneCloseLabel (the done screen), and the render-time timeRequest options of lead-form.v1 gain serviceSlug (the treatment the page is about) and nowMin (the clinic's clock at render, so a part of today that is over is not offered); both are injected by the clinic site, never stored.getContent
    • Changedbooking.v1 confirmNote has a new default wording (it no longer promises that nobody else takes the slot), and a lead-form.v1 without noticePlacement shows the information clause under the send button; an explicit before-submit keeps the old order.getContent
  12. 1.22.0

    • AddedBlock props a treatment landing page uses: feature-cards.v1 variant: "list" (short sentences without icons), process-steps.v1 note (a closing line under the steps), lead-form.v1 noticePlacement (after-submit: the information clause under the send button), an in-page anchor on process-steps.v1, lead-form.v1, booking.v1 and cta-band.v1 (the id the page's buttons scroll to), hero.v1 media (image, video or scene) with video (the clinic's film), and case-study-teaser.v1 collapsed (the results pairs folded under a button) and fromCaseStudies.pairsOnly (only case studies whose before and after pair the patient consented to).getContent
  13. 1.21.0

    • AddedCase studies gain resultsNote (the fixed note to show with every case study), and the detail gains story (the four-part description of the owner's wizard), pairs (every before and after pair the patient consented to; empty without that consent, and for a case study added before 1.20.0, whose library photos stay in before and after), sessionsCount, resultAfterDays and doctorSlug.listCaseStudiesgetCaseStudygetContent
  14. 1.20.0

    • Behaviour changeA case study's image, before and after can carry a patient's photo added with consent, only when the patient agreed to show it on the clinic's site: the url points to /api/case-study-photo/{id} (supports ?w= and ?f=, cached briefly). A case study added before 1.20.0 keeps its library image exactly as before until the patient refuses or withdraws; any other case study returns null without that consent.listCaseStudiesgetCaseStudygetContent
    • Behaviour changeA case study that needs the patient's consent leaves the list, the detail (404) and /content as soon as the consent is withdrawn, expires or no longer covers its photos or description.listCaseStudiesgetCaseStudygetContent
  15. 1.19.0

    • AddedA landing page's blocks (GET /content) may carry the block type popup-cta.v1: a window with a heading, a short text and a bar at the bottom of the screen that presents the page's one contact block (the form, the booking widget or the call band). It has no content of its own and never a second form; the contact block stays on the page, so a frontend that skips the type loses nothing.getContent
  16. 1.18.0

    • AddedGET /conversations/{id} lists mergedEnquiries: the enquiries of the leads the clinic merged into the conversation's lead (a form's message, the first chat message, a Lead Ads answer), oldest first, each with the merged lead's id, source, channel and createdAt. They are read from the merged leads while the merge lasts: after the clinic undoes a merge, its enquiry leaves the list and is that lead's own lead.message again.getConversation
  17. 1.17.0

    • AddedNew refusal code chat_disabled: the chat on the clinic's site is off, its window is gone, so the patient would not see a message there. GET /conversations/{id} shows it on the chat channel, POST /conversations/{id}/messages answers 409 with it.getConversationsendMessage
    • Behaviour changeThe chat goes by the chat session on the patient's card, not by where the card came from: a card the clinic merged a chat card into can be answered in the chat (the patient's first chat question was the only message), the merged card no longer. With the chat off a chat message was stored as sent; now it is refused with chat_disabled and nothing is stored.getConversationsendMessage
  18. 1.16.0

    • AddedA patient may have several numbers, e-mail addresses and Messenger or Instagram ids. GET /conversations/{id} lists them in identities (channel, address, primary, verified, optedOut, replyDefault, lastInboundAt); POST /conversations/{id}/messages takes an optional to, one of those addresses. Without to a message goes to the address the patient last wrote from on that channel. An SMS STOP opts out that number only. New refusal codes address_required and address_unknown.getConversationsendMessage
  19. 1.15.0

    • AddedMessenger, the clinic's Facebook Page, is a conversation channel: messenger in channel (filters, messages, channel states, POST /conversations/{id}/messages). A message goes out while the patient wrote on Messenger in the last 24 hours; new refusal codes fb_not_configured, fb_no_user_thread and fb_window_closed.listConversationsgetConversationlistMessagessendMessage
  20. 1.14.0

    • AddedConversations with patients: GET /conversations (filters status, location, channel, updated_since, cursor paging), GET /conversations/{id} (with the channels a message can go out on now and the clinic's reply templates), GET /conversations/{id}/messages and POST /conversations/{id}/messages, which sends by the rules of the clinic's inbox and answers 409 with the reason when they say no. A webhook event names a conversation or a message; read its content here.listConversationsgetConversationlistMessagessendMessage
    • AddedKey scopes: the clinic grants its key conversations:read and conversations:write in Ustawienia › Integracje › Klucz API. Without them the conversation endpoints answer 403 missing_scope; everything else a key could do stays as it was, with no scope.
  21. 1.13.1

    • Behaviour changeGET /booking/slots answers an empty list (and POST /booking/appointments a 409 with no slots) while the clinic says it keeps its visits in Google Calendar and has not connected it yet: busy times would be unknown. Ask for a time instead (POST /leads with timeRequest).getSlotscreateAppointment
  22. 1.13.0

    • AddedVisits the clinic confirms and online prepayments: every catalog service carries bookingPolicy (instant, confirm or pay, already resolved) and prepay (amount in grosze, kind and a ready label, or null). POST /booking/appointments answers status (confirmed or pending), pendingUntil while the slot is held and paymentUrl (the clinic's Stripe Checkout) when a prepayment is due. Services without a policy book exactly as before.getBookingCatalogcreateAppointment
    • AddedAppointment.status can be pending (waiting for the clinic's confirmation or the patient's payment), with pendingUntil.listAppointments
    • AddedSiteProfile.specialty: the clinic's specialty key (e.g. okulistyka), when one was chosen.getSitegetContent
  23. 1.12.0

    • AddedBooking by location: the catalog lists locations (the ones someone works in) and each specialist's locationIds; GET /booking/slots takes location and every slot carries locationId; POST /booking/appointments takes locationId (a slot of another location answers 409). A clinic with one location answers one location and slots there.getBookingCataloggetSlotscreateAppointment
  24. 1.11.0

    • AddedLocations: GET /locations lists the clinic's active locations, the primary one first, each with its address, phone, e-mail, hours and NFZ. A clinic with one location answers one, with the values of the clinic profile.listLocations
  25. 1.10.0

    • AddedAd landing pages: every item of GET /pages carries kind (page, landing or thanks), and the optional ?kind= lists ad landing pages (landing), their thank-you pages (thanks) or everything (all). Without the parameter the list is what it was: the site's pages and entity pages.listPages
  26. 1.9.1

    • ChangedThe served OpenAPI document gains an operationId per operation (the SDK method names), six tags, English descriptions for every operation, parameter, response and property, recorded examples for every response, and x-pp-since on operations, schemas and newer fields. No endpoint, field or type changed.
    • FixedMediaItem.createdAt is documented: GET /media has sent it since 1.2.0.listMedia
    • DeprecatedMediaItem.r2Key is an internal storage key. It stays in the response; build addresses from url.listMediauploadMedia
  27. 1.9.0

    • AddedRequest a time: an optional timeRequest (1 to 3 preferred windows, a treatment and optionally a doctor) on POST /leads, echoed as LeadCreated.timeRequest. An invalid one keeps the lead and adds the warning invalid_time_request; with ?strict=1 it is a 400 with that code.createLead
  28. 1.8.1

    • Behaviour changeBookingCatalogService.priceLabel is the booking service's own price first, then the linked treatment's priceFromLabel. Before, the treatment's price won, so a consultation linked to orthodontics showed the orthodontics price instead of its own.getBookingCatalog
  29. 1.8.0

    • AddedBookingCatalogService.nfz: services under the public health fund (NFZ) are listed for information and booked by phone only.getBookingCatalog
    • Behaviour changeA service the clinic marks as NFZ answers 400 with the code nfz_phone_only on GET /booking/slots and POST /booking/appointments; nothing is stored.getSlotscreateAppointment
  30. 1.7.0

    • AddedGET /privacy: the clinic's privacy policy and the information clause for its forms, with a version to send back.getPrivacy
    • AddedOptional privacyNoticeVersion and marketingConsent on POST /leads and POST /booking/appointments; SiteProfile.privacy.createLeadcreateAppointmentgetSite
  31. 1.6.3

    • ChangedEvery booking sends reception a "Nowa wizyta" e-mail with an .ics file; a lead created by a booking no longer sends a second e-mail of its own. The response is unchanged.createAppointment
  32. 1.6.2

    • FixedSite.noindex: keep robots.txt open (Allow: /, no Sitemap line) so crawlers can see the noindex and drop pages they indexed before. The description used to recommend Disallow: /.getSitegetContent
  33. 1.6.1

    • Behaviour changePOST /media refuses SVG files with 415. SVG files uploaded before are still served, with a sandboxing Content-Security-Policy header.uploadMedia
  34. 1.6.0

    • AddedPOST /feedback: remarks about the clinic's site or the API for the platform team, with personal data removed before storing and 20 remarks per hour per clinic and source.sendFeedback
  35. 1.5.0

    • AddedSite.noindex: the clinic keeps its site out of search engines, and your frontend follows.getSitegetContent
  36. 1.4.0

    • AddedGET /site and Site.profile: contact, address, map point, opening hours, NFZ, payments, social links, logos and registry numbers.getSitegetContent
    • AddedImage variants of library files (?w= on a fixed width ladder, f= auto, avif or webp) and width, height, aiGenerated and caption on MediaRef and MediaItem; caption and aiGenerated on POST /media.uploadMedialistMedia
  37. 1.3.0

    • AddedGET /booking/catalog, and bookingServiceId on treatments and bookingResourceId on team members to link pages to booking.getBookingCataloglistServicesgetServicelistDoctorsgetDoctor
    • AddedRateLimit-Limit, RateLimit-Remaining and RateLimit-Reset on every response to a valid key; code on errors that have one.
    • AddedPOST /leads answers warnings: ["missing_contact"] for a lead without a phone or e-mail, and rejects it with ?strict=1.createLead
    • FixedPOST /leads answers 400 invalid_json or invalid_body for a body that is not a JSON object, instead of failing.createLead
  38. 1.2.0

  39. 1.1.0

  40. 1.0.0

    • AddedThe first public API: a page with its site, the published paths and creating a lead, with a secret Bearer key and 120 requests per minute.getContentlistPagescreateLead

SDK

  1. 0.28.0

    for API 1.29.0
    • AddedA page's blocks are typed with style?: { tone? } (SectionTone), and the block union gains contact.v1 (API 1.29.0). No change in the client's methods.
  2. 0.27.1

    for API 1.28.1
    • ChangedNo change in the client: getProcess() returns the new values of setupHref and stateReason (API 1.28.1).
  3. 0.27.0

    for API 1.28.0
    • AddedlistRedirects() and the type RedirectRule: the old addresses the clinic's site serves now. PageListItem gains seoTitle and seoDescription.
  4. 0.26.0

    for API 1.27.0
    • AddedBlock prop types of API 1.27.0: TeamGridV1Props fromTeam, PricingV1Props and ServicesGridV1Props fromServices. A section with them comes filled in members and items.
  5. 0.25.2

    for API 1.26.2
    • ChangedFollows API 1.26.2: a treatment, a team member, a case study, a post or a page the clinic moved to its panel's trash is in no list and answers 404 until restored. No type changes.
  6. 0.25.1

    for API 1.26.1
    • ChangedThe doc comment of MessageStatus follows API 1.26.1: queued is a reply from the clinic's panel held on the server for a few seconds, which may still vanish when the person takes it back. No type changes.
  7. 0.25.0

    for API 1.26.0
    • AddedSiteProfile.vocabulary and the constant VOCABULARY_FAMILIES with its type VocabularyFamily (API 1.26.0).
  8. 0.24.0

    for API 1.25.0
    • AddedApiKeyScope gains case_studies:write (API 1.25.0), the scope the clinic's AI assistant needs for case-study drafts.
  9. 0.23.0

    for API 1.24.0
    • AddedgetProcess() and the types PatientProcess, ProcessStep, ProcessAction, ProcessTiming, ProcessInfo and ProcessError (API 1.24.0).
  10. 0.22.1

    for API 1.23.1
    • ChangedThe doc comments of pendingUntil (AppointmentCreated, Appointment) follow API 1.23.1: never later than the visit's startAt. No type changes.
  11. 0.22.0

    for API 1.23.0
    • AddedBlock prop types of API 1.23.0: BookingV1Props backLabel, requestSubmitLabel, addToCalendarLabel and doneCloseLabel; TimeRequestOptions serviceSlug and nowMin.
  12. 0.21.0

    for API 1.22.0
    • AddedBlock prop types of API 1.22.0: FeatureCardsV1Props variant: "list", ProcessStepsV1Props note and anchor, LeadFormV1Props noticePlacement and anchor, BookingV1Props / CtaBandV1Props anchor, HeroV1Props media and video, CaseStudyTeaserV1Props collapsed and fromCaseStudies.pairsOnly.
  13. 0.20.0

    for API 1.21.0
    • AddedCaseStudySummary.resultsNote; CaseStudyDetail gains resultsNote, story (CaseStudyStory), pairs (CaseStudyPair), sessionsCount, resultAfterDays and doctorSlug.
  14. 0.19.0

    for API 1.20.0
    • ChangedNo type changes. A case study's image, before and after carry a patient's photo added with consent (a /api/case-study-photo/{id} URL) only under the patient's consent; a case study added before API 1.20.0 keeps its library image until the patient refuses or withdraws.
  15. 0.18.0

    for API 1.19.0
    • AddedPopupCtaV1Props (the props of popup-cta.v1) and LANDER_CTA_ANCHOR, the id of a landing page's contact block that the popup and the page's buttons point to.
  16. 0.17.0

    for API 1.18.0
    • AddedConversationDetail gains mergedEnquiries (ConversationMergedEnquiry): the enquiries of the leads merged into the conversation's lead.
  17. 0.16.0

    for API 1.17.0
    • AddedSendRefusalCode gains chat_disabled (the chat on the clinic's site is off).
  18. 0.15.0

    for API 1.16.0
    • AddedConversationDetail gains identities (ConversationIdentity), SendMessageInput gains to; SendRefusalCode gains address_required and address_unknown.
  19. 0.14.0

    for API 1.15.0
    • AddedConversationChannel gains messenger; SendRefusalCode gains fb_not_configured, fb_no_user_thread and fb_window_closed.
  20. 0.13.0

    for API 1.14.0
    • AddedlistConversations(), getConversation(), listMessages() and sendMessage() with their types (Conversation, ConversationMessage, SendMessageInput, SendRefusalCode…), and isSendRefused() for the 409 of a refused send.
  21. 0.12.0

    for API 1.13.1
    • AddedBookingCatalogService.bookingPolicy and prepay (BookingPrepay), appointment.status, pendingUntil and paymentUrl from createAppointment(), pending in AppointmentStatus, SiteProfile.specialty.
  22. 0.11.0

    for API 1.12.0
    • AddedgetSlots({ locationId }), AppointmentInput.locationId, BookingCatalog.locations and BookingCatalogResource.locationIds.
  23. 0.10.0

    for API 1.11.0
    • AddedlistLocations() and the Location type.
  24. 0.9.0

    for API 1.10.0
    • AddedlistPages({ kind }) lists ad landing pages, their thank-you pages or everything; PageListItem.kind and the PageListKind type.
  25. 0.8.1

    for API 1.9.1
    • AddedMediaItem.createdAt is typed.
  26. 0.8.0

    for API 1.9.0
    • AddedcreateLead({ …, timeRequest }) and LeadCreated.timeRequest; TIME_OF_DAY and windowFromPart build windows from the parts of the day the clinic's form offers.
  27. 0.7.2

    for API 1.8.1
    • ChangedDocuments the new priceLabel order; types unchanged.
  28. 0.7.1

    for API 1.8.0
    • AddedBookingCatalogService.nfz; getSlots and createAppointment throw ApiError with code: "nfz_phone_only" for an NFZ service.
  29. 0.7.0

    for API 1.7.0
    • AddedgetPrivacy(); privacyNoticeVersion and marketingConsent on createLead and createAppointment; SiteProfile.privacy.
  30. 0.6.0

    for API 1.6.0
    • AddedsendFeedback().
  31. 0.5.1

    for API 1.5.0
    • AddedSite.noindex.
  32. 0.5.0

    for API 1.4.0
    • AddedgetSite() and Site.profile; media fields; uploadMedia(file, { caption, aiGenerated }); mediaVariantUrl, mediaSrcSet, phoneHref, WEEKDAYS and SCHEMA_ORG_DAYS.
  33. 0.4.1

    for API 1.3.0
    • FixedThe tarball installs on its own (types inlined, no dependency outside the public registry).
    • AddedcreateLead(lead, { strict }) and LeadCreated.warnings.
  34. 0.4.0

    for API 1.3.0
    • Behaviour changebaseUrl is required: there is no default, so a test frontend never talks to production by accident.
    • AddedNon-2xx answers throw ApiError (SlotTakenError for a taken slot, with fresh slots); booking and media methods; ESM and CommonJS builds.
  35. 0.3.0

    for API 1.3.0
    • AddedgetBookingCatalog(), bookingServiceId and bookingResourceId.
  36. 0.2.0

    for API 1.1.0
    • AddedThe eight entity methods; SiteContent.page is the ContentPage union.
  37. 0.1.0

    for API 1.0.0
    • AddedgetContent, listPages and createLead.