PageSourceSearch

https://www.bloomtext.com/_next/static/chunks/5792-a9edeb94b81b618f.js

js bloomtext.com collected 2026-10-01 15:26:05 UTC 140,544 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5792],{4140:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},5838:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var n=a(37876);a(14232);var o=a(81278),s=a(23555),i=a(30567),r=a(22191),c=a(16326);let l=e=>{let{heading:t,subheading:a,ctaText:l="Get started for free",href:d}=e,h=(0,o.useRouter)(),p=(0,c.L)(h.asPath),m=d||(0,r.PY)({queryParams:{utm_source:"website",utm_medium:"hero",utm_campaign:p}});return(0,n.jsx)("section",{className:"landing-hero",children:(0,n.jsxs)("div",{className:"landing-hero--inner",children:[(0,n.jsx)("h1",{className:"landing-hero--heading",children:t}),(0,n.jsx)("p",{className:"landing-hero--subheading",children:a}),(0,n.jsx)(s.A,{cta:"hero",href:m,className:"blmh-button white-purple landing-hero--cta",children:l}),(0,n.jsx)(i.A,{medium:"hero",className:"landing-cta--demo-link"})]})})};l.displayName="LandingHero";let d=l},17667:(e,t,a)=>{"use strict";a.d(t,{A:()=>s});var n=a(37876);a(14232);let o=e=>{let{groups:t}=e;return(0,n.jsx)("section",{className:"landing-related",children:(0,n.jsx)("div",{className:"landing-related--inner",children:t.map((e,t)=>{let{heading:a,links:o}=e;return(0,n.jsxs)("div",{className:"landing-related--group",children:[(0,n.jsx)("h2",{className:"landing-related--heading",children:a}),(0,n.jsx)("ul",{className:"landing-related--list",children:o.map((e,t)=>{let{label:a,href:o}=e;return(0,n.jsx)("li",{children:(0,n.jsx)("a",{href:o,className:"landing-related--link",children:a})},t)})})]},t)})})})};o.displayName="RelatedLinks";let s=o},33523:(e,t,a)=>{"use strict";a.d(t,{A:()=>l});var n=a(37876),o=a(14232);let s=/^(GET|POST|PUT|PATCH|DELETE) (\S+)$/,i=/^([A-Za-z-]+): (.*)$/,r=(e,t)=>{let a=e.match(s);if(a)return(0,n.jsxs)("span",{className:"code-block--line",children:[(0,n.jsx)("span",{className:"code-block--method",children:a[1]})," ",(0,n.jsx)("span",{className:"code-block--url",children:a[2]})]},t);let o=e.match(i);return o?(0,n.jsxs)("span",{className:"code-block--line",children:[(0,n.jsxs)("span",{className:"code-block--header",children:[o[1],":"]})," ",o[2]]},t):(0,n.jsx)("span",{className:"code-block--line",children:e},t)},c=e=>{let{code:t,label:a="HTTP",wrap:s=!1}=e,[i,c]=(0,o.useState)(!1);return(0,n.jsxs)("div",{className:s?"code-block code-block--wrap":"code-block",children:[(0,n.jsxs)("div",{className:"code-block--bar",children:[(0,n.jsx)("span",{className:"code-block--label",children:a}),(0,n.jsx)("button",{type:"button",className:"code-block--copy",onClick:()=>{navigator.clipboard&&navigator.clipboard.writeText(t).then(()=>{c(!0),setTimeout(()=>c(!1),1500)}).catch(()=>{})},children:i?"Copied":"Copy"})]}),(0,n.jsx)("pre",{className:"code-block--pre",children:(0,n.jsx)("code",{children:t.split("\n").map(r)})})]})};c.displayName="CodeBlock";let l=c},56121:(e,t,a)=>{e.exports=a(61847)()},61847:(e,t,a)=>{"use strict";var n=a(4140);function o(){}function s(){}s.resetWarningCache=o,e.exports=function(){function e(e,t,a,o,s,i){if(i!==n){var r=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw r.name="Invariant Violation",r}}function t(){return e}e.isRequired=e;var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:s,resetWarningCache:o};return a.PropTypes=a,a}},66621:(e,t,a)=>{"use strict";a.d(t,{D:()=>u});let n=function(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"2026-09-21";return{url:e,label:t,section:a,lastVerified:n}},o={buildIdeasIntro:"athenaOne runs the front desk, schedule, and billing for outpatient practices, and its APIs expose the events a front desk cares about: bookings, cancellations, check-ins, and the waitlist. Most of these ideas use athenaOne APIs, which need a signed contract with athenahealth before they reach production.",buildIdeas:[{title:"Fill cancelled slots from the waitlist",description:"athenaOne keeps a waitlist of patients who want an earlier visit, with the provider, department, days, and hours they prefer. When a Cancel Appointment event comes through, your app reads the waitlist entr
1ies for that provider and texts the first match that an earlier time opened up. Staff still book the slot in athenaOne.",vendorData:"athenaOne appointment changed feed and Appointment Waitlist"},{title:"Check-in pings for the clinical team",description:"Subscribe to the Check In event and post a short note to the care team’s conversation when a patient arrives, using initials and the visit time. Medical assistants see it on their phones without watching the athenaOne schedule.",vendorData:"athenaOne appointment changed feed (Check In event)"},{title:"Follow-up recalls from appointment ticklers",description:"athenaOne stores follow-up reminders, called appointment ticklers, with an approximate date for the next visit. A weekly job reads the ticklers coming due and texts each patient that it’s time to book their follow-up.",vendorData:"athenaOne Appointment Reminders (ticklers)"},{title:"Telehealth device-check reminders",description:"For native athenaTelehealth visits, athenahealth asks practices to share its device-check link in patient messaging. Send it the day before so patients test their camera and microphone before the visit starts.",vendorData:"athenaOne Appointment data for telehealth visits"},{title:"Reschedule confirmations",description:"When the front desk moves a visit, the changed feed reports the update. Your app texts the patient the new date and time in the same conversation they already use, so there is one thread per patient instead of scattered notices.",vendorData:"athenaOne appointment changed feed"}],exampleProjects:[{title:"Cancellation-to-waitlist texter",summary:"Poll the appointments changed feed every minute. When a visit is cancelled, offer the opening to the first waitlisted patient for that provider.",steps:["Subscribe once to the practice’s appointments changed feed.","Call the changed endpoint at least once an hour, ideally every minute. athenaOne drops queued events after 24 hours.","For each cancellation, read the waitlist for that provider and pick the highest-priority entry.","Find the patient in BloomText by MRN and send the offer."],code:'POST https://api.platform.athenahealth.com/v1/<approved-practice-id>/appointments/changed/subscription\nAuthorization: Bearer <approved-access-token>\n\nGET https://api.platform.athenahealth.com/v1/<approved-practice-id>/appointments/changed\nAuthorization: Bearer <approved-access-token>\nAccept: application/json\n\nGET https://api.platform.athenahealth.com/v1/<approved-practice-id>/appointments/waitlist?providerid=<approved-provider-id>\nAuthorization: Bearer <approved-access-token>\nAccept: application/json\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"An earlier opening came up on Thursday at 3:40 PM. Reply YES and our front desk will move your visit."}'},{title:"Arrival alerts for the care team",summary:"Tell the medical assistants when a patient checks in, without anyone refreshing the schedule.",steps:["Subscribe to the appointments changed feed, or to Event Notifications if your contract includes webhooks.","Keep only Check In events for the departments this team covers.","Map the department to the team’s BloomText conversation, and post there with an org admin’s OAuth token. The admin must be in that conversation; an API key can only message patients.","Post initials, visit time, and provider. Leave the reason for visit in athenaOne."],code:'GET https://api.platform.athenahealth.com/v1/<approved-practice-id>/appointments/changed\nAuthorization: Bearer <approved-access-token>\nAccept: application/json\n\nPOST https://api.bloomtext.com/v1/me/conversations/{careTeamConversationId}/messages\n\n{"body":"K.L. checked in for 2:15 PM with Dr. Rao."}'},{title:"Weekly tickler recall",summary:"Turn follow-up ticklers into a friendly nudge to book.",steps:["Read the practice’s appointment reminders (ticklers) for each department.","Keep the ones whose approximate date falls in the next two weeks.","Post one recall message per patient and log the date you sent it, so next week’s run skips them."],code:'GET https://api.platform.athenahealth.com/v1/<approved-practice-id>/appointments/appointmentreminders\nAuthorization: Bearer <approved-access-token>\nAccept: application/json\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"It’s time to book your follow-up visit. Reply with a day that works and we’ll find a time."}'}],aiAgent:{intro:'A front-desk agent that can see the athenaOne schedule and write in BloomText can work the waitlist, answer "when is my visit?" replies, and flag same-day cancellations, while staff approve anything that changes the schedule.',vendorTools:'Give the agent a few small tools that call athenaOne APIs with your approved credentials, such as "get changed appointments" and "get waitlist for provider". Keep booking and cancelling out of the toolset until you trust it. athenahealth has said it is building an MCP server for athenaOne and AI platforms like Claude; until that appears in its developer documentation, your own tools are the way in.',steps:["The agent pulls the latest appointment changes through your athenaOne tool.","For each cancellation it reads the waitlist and drafts an offer to the best match.","It sends the patient the offer in BloomText and watches for a reply.","When a patient says yes, it posts a summary in the front-desk conversation, through an org admin’s OAuth connection, so staff book the slot in athenaOne."],examplePrompt:'Every 10 minutes, check athenaOne for cancelled appointments today and tomorrow. For each one, find the highest-priority waitlist entry for the same provider and text that patient the open time. If they reply yes, post "Move <initials> to <time>" in the Front Desk conversation. Never book or cancel anything yourself.'},faqs:[{question:"Does athenahealth have an API?",answer:"Yes. athenahealth offers three kinds: athenaOne APIs, its own REST endpoints with write access across scheduling, clinical, and billing work; FHIR APIs for USCDI clinical data; and Certified APIs, the FHIR R4 endpoints required for ONC certification. Production calls go to api.platform.athenahealth.com and testing calls to api.preview.platform.athenahealth.com."},{question:"How do I get athenahealth API access?",answer:"Create an app in the athenahealth Developer Console. It gets sandbox access to Preview practice 195900 right away, with test patients. Apps that use only Certified APIs can self-onboard, and a practice turns them on from an admin page. athenaOne APIs need a contract through athenahealth Platform Services, then a technical spec, a solution validation demo, and a go-live form before you get production keys. athenaPractice and athenaFlow use a separate developer portal with Microsoft sign-in."},{question:"Does athenahealth have patient texting?",answer:"Yes. athenaOne sells patient engagement tools that include Patient 
1Conversations, which offers two-way texting and secure chat, plus outreach messaging and waitlist notifications. If a practice already sends reminders from athenaOne, build around them instead of duplicating them. BloomText is useful for the conversations your own software drives and for staff chat."},{question:"Can I get real-time appointment updates from athenahealth?",answer:"Two ways. Changed Data Subscriptions are a polling feed: you subscribe once and call the changed endpoint, at least hourly, because unread events expire after 24 hours and unused subscriptions are removed after 7 days. Event Notifications push events such as Appointment.cancel and Appointment.check-in to your webhook in seconds, but they carry only IDs and require an updated API contract."},{question:"Can I connect athenahealth to Claude, ChatGPT, or another AI agent?",answer:"Yes, through tools you write. Wrap the athenaOne endpoints your contract allows as agent tools, and add BloomText API tools, using an organization API key, so the same agent can read and send messages. athenahealth has written that it is building an MCP server for athenaOne, but it is not in the public developer documentation yet."},{question:"Is it HIPAA compliant to text patients using athenahealth data?",answer:"It can be, if every party handling PHI is covered. BloomText turns on API access only for organizations with a signed BAA, and your use of athenahealth data runs under your contract with athenahealth and the practice. Keep messages to what the patient needs, like a time or a link, and leave clinical detail in athenaOne."}],sources:[n("https://docs.athenahealth.com/api/guides/overview","Welcome to APIs at athenahealth","The three API types: athenaOne, FHIR, and Certified APIs"),n("https://docs.athenahealth.com/api/guides/certified-apis","athenahealth Certified APIs","Free Certified APIs, self-service onboarding, and practice-enabled access"),n("https://docs.athenahealth.com/api/guides/contracting","athenahealth API contracting","Contract required for non-certified FHIR and athenaOne APIs; Marketplace Partner Program"),n("https://docs.athenahealth.com/api/guides/our-process","athenahealth API process","Tech spec, Preview environment, solution validation, and go-live steps"),n("https://docs.athenahealth.com/api/guides/testing-sandbox","Testing in Sandbox","Automatic Preview access and sandbox practice 195900 with test patients"),n("https://docs.athenahealth.com/api/guides/environment-urls","athenahealth environment URLs","Preview and Production base URLs"),n("https://docs.athenahealth.com/api/guides/changed-data-subscriptions","Changed Data Subscriptions","Appointment and patient changed feeds, event list, 24-hour queue, 7-day cleanup"),n("https://docs.athenahealth.com/api/guides/event-notifications","Event Notifications","Webhook delivery, ID-only payloads, contract requirement"),n("https://docs.athenahealth.com/api/guides/event-notifications-subscription-topics","Event Notifications subscription topics","Appointment topics including cancel, check-in, and reschedule"),n("https://docs.athenahealth.com/api/api-ref/appointment","athenahealth Appointment API reference","Booked appointments, changed subscription, and the athenaTelehealth device-check link"),n("https://docs.athenahealth.com/api/api-ref/appointment-waitlist","athenahealth Appointment Waitlist API","GET /appointments/waitlist and its provider, department, and priority fields"),n("https://docs.athenahealth.com/api/workflows/appointment-reminders","athenahealth Appointment Reminders workflow","Appointment ticklers and GET /appointments/appointmentreminders"),n("https://mydata.athenahealth.com/access-the-apis","Developer Portal for athenaPractice and athenaFlow","Separate portal using Azure Active Directory app registration"),n("https://www.athenahealth.com/solutions/athenaone/patient-engagement","athenaOne Patient Engagement","Patient Conversations two-way texting, outreach messaging, and waitlist"),n("https://www.athenahealth.com/resources/blog/mcp-servers-securely-connect-to-consumer-ai","athenahealth blog: MCP servers","March 2026 statement that athenahealth is building an MCP server")]},s={buildIdeasIntro:"In CentralReach, an ABA session moves from appointment to timesheet to billing entry, tied to the client’s authorization. CentralReach’s public reference covers authentication and a staff contact c
1all; your representative provisions the rest. These ideas assume your API user has permission for the data each one names.",buildIdeas:[{title:"Lock-date nudges for unconverted sessions",description:"CentralReach creates the billing entry only after an appointment is converted to a timesheet, and practices set a lock date for payroll. A job finds sessions still waiting for conversion a day before that date and posts a short list to each clinic’s team conversation, so RBTs close them out before billing stalls.",vendorData:"CentralReach scheduling data your API user is approved to read"},{title:"Case-team rosters that follow staffing changes",description:"Each client’s case team usually has a BCBA, a few RBTs, and a scheduler. When your app sees a staffing change, it reads the employee’s CentralReach contact record, matches it to a BloomText user, and flags that person to add to or remove from the case-team conversation.",vendorData:"CentralReach employee contact records"},{title:"Authorization runway alerts",description:"CentralReach links appointments to authorizations with start and end dates, service codes, and approved amounts. Post an internal note to the BCBA and scheduler when an authorization is close to its end date, so the reauthorization request goes in before sessions have to stop. Payer detail stays in the staff conversation, never in a caregiver text.",vendorData:"CentralReach authorization data, if your approved access includes it"},{title:"Cancellations and sub coverage",description:"When a session is cancelled, message the caregiver’s conversation that today’s session is off, then post the open slot to the staffing conversation so a scheduler can offer it to another RBT. The standard cancellation reason stays in CentralReach.",vendorData:"CentralReach scheduling data"},{title:"Caregiver training reminders",description:"Parent and caregiver training sessions are easy to forget because they sit outside the regular therapy block. Send the caregiver a reminder the afternoon before with the time and whether it is in the clinic, at home, or over telehealth.",vendorData:"CentralReach scheduling and client data"}],exampleProjects:[{title:"Case-team roster check",summary:"A nightly job that keeps each case-team conversation in BloomText matched to the staff CentralReach says are on the case.",steps:["Exchange your client ID and secret for a CentralReach access token. It lasts one hour.","Read each assigned employee’s contact record with your CR API key.","Map the CentralReach employee ID to a BloomText user ID in your own table.","Compare against the case team you saw last night, and show the differences in your app so a staff member can update the case-team conversation in BloomText."],code:"POST https://login.centralreach.com/connect/token\nContent-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials&client_id=<approved-client-id>&client_secret=<approved-client-secret>&scope=cr-api\n\nGET https://partners-api.centralreach.com/enterprise/v1/contacts/employee/<approved-employee-id>\nAuthorization: Bearer <approved-access-token>\nx-api-key: <approved-cr-api-key>\nContent-Type: application/json"},{title:"Lock-date sweep",summary:"The day before your timesheet lock date, tell each clinic which sessions still need converting.",steps:["Pull the week’s appointments through the scheduling endpoints your representative enabled for your API user.","Keep the ones not yet converted to timesheets and group them by clinic and RBT.","Post one message per clinic in its team conversation with an org admin’s OAuth token, using staff initials and session times only. The admin must be in each conversation.","Thread follow-up questions under the post with reply_to_message_id."],code:'POST https://api.bloomtext.com/v1/me/conversations/{clinicTeamConversationId}/messages\n\n{"body":"Lock date is tomorrow at 5 PM. 6 sessions from this week still need converting: J.R. (Mon, Wed), A.T. (Tue), M.K. (Thu x3)."}'},{title:"Cancelled-session notice",summary:"Tell the family right away and put the open slot in front of the schedulers.",steps:["Detect the cancellation from the CentralReach appointment data your app reads.","Find the caregiver in BloomText by MRN and send the notice.","Post the open time to the staffing conversation with an org admin’s OAuth token.","The caregiver’s reply lands in the same conversation, where the scheduler sees it."],code:'POST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{caregiverPatientId}"},"body":"Today’s 3:00 PM session is cancelled. We will text you to reschedule."}\n\nPOST https://api.bloomtext.com/v1/me/conversations/{staffingConversationId}/messages\n\n{"body":"Open slot: today 3:00 to 5:00 PM, north clinic. Reply if you can cover."}'}],aiAgent:{intro:"An ABA practice runs on a lot of small checks: which sessions still need convert
1ing, whose authorization is about to end, which families need to hear about a schedule change. An agent with CentralReach data and BloomText can do those checks and send the messages.",vendorTools:"You give the agent a small CentralReach tool that gets a one-hour token with your client credentials, sends your CR API key, and calls only the endpoints your API user has permission for. CentralReach does not document an MCP server or an AI connector of its own. Third-party connectors that automate the CentralReach web app are not CentralReach products, so check them against your API Addendum before you use one.",steps:["The agent calls your CentralReach tool for this week’s appointments at one clinic.","It keeps the sessions that still need converting before the lock date.","It posts a summary in the clinic’s team conversation with initials and times, through an org admin’s OAuth connection.","It reads replies in that thread and reports which RBTs haven’t answered."],examplePrompt:"Using CentralReach, list this week’s sessions at the north clinic that are not yet converted to timesheets. Post one summary in the north clinic team conversation in BloomText with staff initials and session times, no client names. Tomorrow at 10 AM, tell me who still hasn’t replied."},faqs:[{question:"Does CentralReach have an API?",answer:"Yes. CentralReach publishes a REST API over HTTPS with JSON at partners-api.centralreach.com, for managing practices, clients, staff, and more. The public reference covers authentication and shows one example call, reading an employee contact. The full list of endpoints you can use comes through your CentralReach representative."},{question:"How do I get CentralReach API access?",answer:"Talk to your dedicated CentralReach representative. They provision a client ID and client secret for the OAuth client-credentials flow, plus a CR API key issued per organization. The API Addendum licenses the API to customers with an active API subscription, lets CentralReach set usage limits, and does not allow sublicensing."},{question:"Why does my CentralReach API call return 401 or 403?",answer:'CentralReach’s response code table says a 401 usually means the Authorization header is wrong; it should read "Authorization: Bearer" followed by your token. A 403 before authentication means the x-api-key header is missing or wrong. A 403 after authentication means your API user lacks permission for that endpoint. Tokens expire after an hour, so request a new one when calls start failing.'},{question:"Does CentralReach have text messaging for families?",answer:"CentralReach has a Messages module, and families can message staff securely through the Client Portal. Its Client Portal sheet says clients can opt in to email or text notifications about those messages. Practices add BloomText when they want staff chat and caregiver texting in one place, driven from their own code through the BloomText API."},{question:"Can I connect CentralReach to ChatGPT, Claude, or another AI agent?",answer:"Yes, through tools you build. Your agent reaches BloomText through the BloomText API, with an organization API key. For CentralReach data, the agent calls a tool that uses your approved credentials, because CentralReach does not publish its own MCP server or AI connector."},{question:"Is it HIPAA compliant to text ABA families from CentralReach data?",answer:"It can be, if each system that touches the data is covered. BloomText turns on API access only for organizations with a signed BAA. On the CentralReach side, confirm your Business Associate Agreement covers the data your integration reads. Keep texts to logistics like session times and cancellations, and leave programs, goals, and payer details out."}],sources:[n("https://centralreach.com/legal/api-addendum/","CentralReach API Addendum","API license for customers with an active API subscription, usage limits, no sublicensing"),n("https://centralreach.com/uploads/CentralReach-Scheduling-Playbook.pdf","CentralReach Scheduling Playbook","Appointments linked to authorizations and service codes, conversion to timesheets and billing entries, lock dates, c
1ancellation reasons"),n("https://centralreach.com/uploads/client-portal-sheet.pdf","CentralReach Client Portal sheet","Secure messages with staff and opt-in email or text notifications")]},i={buildIdeasIntro:"Henry Schein One groups Dentrix API access into categories like Appointments, Demographics, Clinical, Financial, Insurance, and Referral. Once your app is approved for the ones you need, these are the dental office workflows you can wire into BloomText.",buildIdeas:[{title:"Morning huddle in the team chat",description:"Before the first patient, pull the day’s schedule from Dentrix and post a short huddle note to your front desk and hygiene team conversation. It lists open chairs and patients who haven’t confirmed, so nobody has to print the appointment book.",vendorData:"Dentrix Appointments data"},{title:"Hygiene recall outreach",description:"Find patients whose six-month cleaning is past due and message each one in their BloomText conversation with a link or phone number to book. Replies land in the same thread your front desk already works from.",vendorData:"Dentrix Appointments and Demographics data"},{title:"Next-day confirmations with reply triage",description:"Send a confirmation the afternoon before each visit. When a patient answers, your app reads new patient replies from BloomText and flags anything other than a clear “yes” for a person to handle.",vendorData:"Dentrix Appointments data"},{title:"Specialist referral handoffs",description:"When a referral to an oral surgeon or endodontist is recorded, post a note to the internal referrals conversation so the coordinator follows up the same day. The note carries the patient’s chart number and the specialist, not clinical detail.",vendorData:"Dentrix Referral data"},{title:"Statement and insurance follow-ups",description:"When a statement goes out or an insurance claim needs the patient’s updated card, message the patient that the office needs a quick call back. Keep amounts and plan details out of the text and let staff cover them on the phone.",vendorData:"Dentrix Financial and Insurance data"}],exampleProjects:[{title:"Morning huddle poster",summary:"A scheduled job that turns today’s Dentrix schedule into one message in your team conversation at 7:30 AM.",steps:["Read today’s appointments through the Dentrix API calls Henry Schein One approved for your app.","Count open chair time and unconfirmed visits per provider.","Post the summary to the huddle team conversation with an org admin’s OAuth token. The admin must be in that conversation.","Thread questions from staff under the huddle post with reply_to_message_id."],code:'POST https://api.bloomtext.com/v1/me/conversations/{teamConversationId}/messages\n\n{"body":"Huddle: 3 open hygiene slots this afternoon, 4 patients not yet confirmed. Details in the schedule."}'},{title:"Recall reminder batch",summary:"Once a week, message patients who are due for a cleaning and let the front desk handle the replies.",steps:["Pull patients due for recall from your approved Dentrix Appointments and Demographics access.","Find each patient in BloomText by MRN, or send to their phone number, which creates the patient if needed.","Send each patient the reminder.","Replies land in the same conversation your front desk already works from."],code:'GET https://api.bloomtext.com/v1/patients?mrn={mrn}\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Hi from Maple Street Dental. You are due for your cleaning. Reply here or call us to pick a time."}'},{title:"Confirmation reply checker",summary:"Read the replies to yesterday’s confirmations and note the handled ones so staff see what is left.",steps:["Read patient replies sent since the confirmations went out.","Record the clear confirmations in your app so the team can skip them.","Only write the confirmation back to Dentrix if your app has approved WRITE access; otherwise staff update the appointment book."],code:"GET https://api.bloomtext.com/v1/patient-messages?after={confirmationsSentAt}&q=from:patient&page[limit]=100"}],aiAgent:{intro:"An agent with Dentrix data and BloomText can run the front desk’s repetitive work: sorting confirmation replies, drafting recall messages, and summarizing the day for the team.",vendorTools:"For Dentrix, you write a small tool that calls the Dentrix API with the key issued under your Dentrix API Agreement and returns only the fields the agent needs. Henry Schein One has announced an MCP layer inside Dentrix Ascend, with its Ask tier in preview for Ascend practices, but it does not document connecting outside agents such as Claude or ChatGPT to it, and the announcement covers Dentrix Ascend only, not desktop Dentrix.",steps:["The agent calls your Dentrix tool to get tomorrow’s unconfirmed appointments.","It finds each patient in BloomText by MRN through your app’s lookup.","It reads each patient’s recent messages so it doesn’t repeat a reminder.","It sends confirmations and lists any replies that need a person, for the front desk."],examplePrompt:"Get tomorrow’s unconfirmed Dentrix appointments. For each patient, check BloomText for whether we already messaged them today. If not, send a short confirmation request with their appointment time. Then give me a list of anyone you skipped."},faqs:[{question:"Does Dentrix have an API?",answer:"Yes. Henry Schein One runs a Dentrix API Program for desktop Dentrix and a Dentrix Ascend API Program for the cloud product, both under its API Exchange. Access is not self-serve: you apply, review your use case with Henry Schein One, and sign the Dentrix API Agreement before you get an API key and documentation."},{question:"How do I get Dentrix API access, and what does it cost?",answer:"Submit the application form on the Henry Schein One API Exchange page, then complete the security assessment and setup testing. The program FAQ lists a one-time $5,000 registration fee for read access and another $5,000 for write access on desktop Dentrix, plus monthly royalties, and a $5,000 setup fee plus $47 per location per month for Dentrix Ascend. Confirm current terms with Henry Schein One before you budget."},{question:"Can I read the Dentrix database directly instead?",answer:"Henry Schein One is rolling out changes to stop unauthorized connections to Dentrix data and asks vendors to use the API program. Build on approved API access so your integration doesn’t break when those changes reach your practices."},{question:"Does Dentrix have patient texting?",answer:"Yes. Dentrix offers automated reminders and two-way texting through its patient communication products such as Communication Manager and the Patient Engage Suite. Teams add BloomText when they want HIPAA-compliant team chat and patient messaging in one place, driven from their own software through the BloomText API."},{question:"Can I connect Dentrix to ChatGPT, Claude, or another AI agent?",answer:"Your agent can reach BloomText through the BloomText API, with an organization API key. For Dentrix data, the agent calls a tool you build on your approved Dentrix API key. Dentrix Ascend has announced its own MCP layer, but Henry Schein One has not documented outside agents connecting to it."},{question:"Is it HIPAA compliant to text patients from Dentrix data?",answer:"It can be, if every system that handles the data is covered. BloomText turns on API access only for organizations with a signed BAA, and Henry Schein One requires approved vendors to meet its security standards. Keep texts to logistics like appointment times and leave treatment details out."}
1],sources:[n("https://ddp.dentrix.com/pages/faq","Dentrix API Program FAQ","Program scope for Dentrix and Dentrix Ascend, application steps, API Agreement, fees, and data categories"),n("https://www.henryscheinone.com/dental-solutions/api-exchange/api-exchange-vendors/","API Exchange for vendors","Application form, security assessment, setup testing, and approved-vendor listing"),n("https://www.henryscheinone.com/dental-solutions/api-exchange/customer-faqs/","Henry Schein One security enhancements FAQ","Rollout to stop unauthorized connections to Dentrix data"),n("https://www.henryscheinone.com/about-us/press-release/dentrix-ascend-opens-mcp-layer/","Dentrix Ascend MCP layer announcement","Ask tier preview for Dentrix Ascend practices; Orchestrate and Build tiers later"),n("https://www.dentrix.com/dental-solutions/marketing-and-patient-experience/drive-patient-engagement/","Dentrix patient engagement","Automated reminders and two-way texting"),n("https://www.dentrix.com/dental-solutions/marketing-and-patient-experience/dentrix-patient-engage-suite/","Dentrix Patient Engage Suite","Patient communication product")]},r={buildIdeasIntro:"eClinicalWorks splits its developer access in two: provider-facing FHIR APIs on the Open Developer portal, and patient-facing and scheduling APIs on the healow Developer Portal. Read APIs are documented openly. Write APIs, such as adding a note to the chart, need a contract with eClinicalWorks.",buildIdeas:[{title:"Phone-verified patient linking",description:"The eClinicalWorks Patient search accepts last name, first name, and a 10-digit phone number together. When staff link a BloomText patient to a chart, your app runs that search and saves the eCW patient ID as the BloomText patient’s MRN only if exactly one patient comes back.",vendorData:"eClinicalWorks FHIR Patient search"},{title:"Outreach notes in the chart",description:'eClinicalWorks documents a Communication create API that adds a note to the patient’s App Data tab as a checklist item. After your app texts a patient, it can leave a one-line note like "Reminder texted 9/22" so the next person who opens the chart knows it was sent.',vendorData:"eClinicalWorks Communication create API (contract required)"},{title:"Route replies to the patient’s PCP team",description:"The FHIR Patient record carries the patient’s primary care provider. When a patient replies in BloomText, your app looks up that provider and posts a heads-up in the matching team conversation, so a busy multi-provider clinic doesn’t leave replies sitting in a shared queue.",vendorData:"eClinicalWorks FHIR Patient (general practitioner field)"},{title:"Telephone encounters from text replies",description:"eClinicalWorks lists a create API for Telephone Encounters, the record staff already use to document calls. When a patient asks for a callback over text, your app can open a telephone encounter so the request lands in the usual eCW workflow.",vendorData:"eClinicalWorks Encounter (Telephone Encounters) create API (contract required)"},{title:"Human follow-up for unconfirmed visits",description:"Many eCW practices already send automated reminders through eClinicalMessenger. Keep those, and use BloomText for the next step: if your healow-approved scheduling integration shows a visit still unconfirmed the day before, a staff member follows up personally in the patient’s conversation.",vendorData:"healow scheduling APIs, if your app is approved for them"}],exampleProjects:[{title:"Link a patient to the right chart",summary:"A small admin screen where staff type a patient’s name and phone, confirm the eCW match, and save the eCW patient ID on the BloomText patient.",steps:["Search eClinicalWorks for the patient by last name, first name, and phone.","If more than one patient matches, stop and ask staff to pick. Never guess.","Save the eCW patient ID as the patient’s MRN in BloomText.","Send a short welcome message so the patient knows the thread is live."],code:'GET https://<approved-ecw-fhir-host>/fhir/r4/<approved-practice-code>/Patient?family=<last-name>&given=<first-name>&phone=<10-digit-phone>\nAccept: application/json+fhir\nAuthorization: Bearer <approved-oauth2-token>\n\nPATCH https://api.bloomtext.com/v1/patients/{patientId}\n\n{"mrn":"<approved-patient-id>"}\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"You’re all set to text our office here. We’ll reply during clinic hours."}'},{title:"Text, then note it in the chart",summary:"Send the reminder in BloomText, then add a checklist note to the patient’s App Data tab in eClinicalWorks.",steps:["Send the reminder to the patient in BloomText.",'Build a FHIR transaction Bundle with one Communication, status "preparation", the patient reference, and a one-line note.',"POST it to the practice’s FHIR base URL. This needs a Create API contract with eClinicalWorks.","Stay under 250 calls per minute per base URL. eCW returns 429 above that."],code:'POST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Reminder: your visit is tomorrow at 10:20 AM."}\n\nPOST https://<approved-ecw-fhir-host>/fhir/r4/<approved-practice-code>\nContent-Type: application/fhir+json\nAuthorization: Bearer <approved-oauth2-token>\n\n{"resourceType":"Bundle","type":"transaction","entry":[{"resource":{"resourceType":"Communication","status":"preparation","payload":[{"contentString":"Appointment reminder texted 9/22."}],"subject":{"reference":"Patient/<approved-patient-id>"}},"request":{"method":"POST","url":"Communication"}}]}'},{title:"Reply router by primary care provider",summary:"When a patient texts in, notify the team of the provider listed as their PCP in eClinicalWorks.",steps:["Read patient messages sent since you last checked, with your API key.","Take the eCW patient ID from the patient’s MRN.","Read the Patient and take the general practitioner reference.","Post a notice in that provider’s team conversation with an org admin’s OAuth token. Don’t copy the patient’s message text into it."],code:'GET https://api.bloomtext.com/v1/patient-messages?after={lastChecked}&q=from:patient\n\nGET https://<approved-ecw-fhir-host>/fhir/r4/<approved-practice-code>/Patient/<approved-patient-id>\nAccept: application/json+fhir\nAuthorization: Bearer <approved-oauth2-token>\n\nPOST https://api.bloomtext.com/v1/me/conversations/{pcpTeamConversationId}/messages\n\n{"body":"New patient reply waiting in BloomText for Dr. Example’s panel. Initials: R.M."}'}],aiAgent:{intro:"In a busy primary care or community health center, an agent connected to eClinicalWorks and BloomText can sort incoming patient texts, route them to the right provider’s team, and draft replies to routine questions like office hours or form links for staff to send.",vendorTools:'eClinicalWorks does not document an MCP server, so write your own tools that call its FHIR API with your approved OAuth2 credentials, such as "find patient by name and phone" and "get patient PCP". Put your own throttle in front of them, because eCW limits each base URL to 250 calls per minute.',steps:["The agent reads new messages from BloomText through an org admin’s OAuth connection, with `q=is:unread`.","For each one, it looks up the mapped eCW patient and their primary care provider with your FHIR tool.","It posts a short routing note to that provider’s team conversation.","For routine questions it drafts a reply in the team thread for a staff member to approve and send."],examplePrompt:'Check BloomText for patient messages from the last 15 minutes that nobody has answered. For each one, use the eCW tool to find the patient’s PCP and post "<initials> is waiting for a reply" in that PCP’s team conversation. If the question is about hours, directions, or forms, draft a reply there too. Don’t send anything to the patient yourself.'},faqs:[{question:"Does eClinicalWorks have an API?",answer:"Yes. eClinicalWorks publishes FHIR R4 APIs on its Open Developer portal, covering USCDI read APIs such as Patient, Encounter, and DocumentReference, plus create APIs for things like Communication notes and telephone encounters. Each practice has its own base URL under /fhir/r4/{practice_code}. Patient-facing apps use the separate healow Developer Portal."},{question:"How do I get eClinicalWorks API access?",answer:"Sign up on the Open Developer portal, register your app, test it, publish it to production, and then connect to eClinicalWorks customers who enable it. Server-to-server apps use Backend Services, and practices can enable bulk patient groups for them. Create APIs need a contract, which starts with [email protected]."},{question:"Can I read appointments from the eClinicalWorks API?",answer:"Not from the provider FHIR read APIs. The Open Developer documentation sends developers who need scheduling to the healow Developer Portal, which has its own sign-up and review. Plan for that second approval if your project depends on appointment times."},{question:"Does eClinicalWorks have patient texting?",answer:"Yes. eClinicalMessenger sends automated reminders by voice, secure text, the healow app or patient portal, and email, and appointment confirmations flow back into the eCW schedule. If a practice already runs those reminders, use BloomText for the conversations your own software drives and for staff chat, not a second reminder."},{question:"Can I connect eClinicalWorks to Claude, ChatGPT, or another AI agent?",answer:"Yes, with tools you build. eClinicalWorks does not document an MCP server, so wrap the FHIR calls your app is approved for as agent tools and add BloomText API tools for messaging, using an organization API key. Keep the 250 calls per minute limit in mind when an agent loops over many patients."},{question:"Is it HIPAA compliant to text patients using eClinicalWorks data?",answer:"It can be when each party that touches PHI is covered. BloomText turns on API access only for organizations with a signed BAA, and your access to eClinicalWorks data runs under the practice’s authorization and any eCW c
1ontract. Keep texts to logistics like times and links, and leave clinical detail in the chart."}],sources:[n("https://fhir.eclinicalworks.com/ecwopendev","eClinicalWorks Platform for Open Development","Provider-centric apps here; patient-centric apps on the healow developer portal"),n("https://fhir.eclinicalworks.com/ecwopendev/documentation/getting-started","eClinicalWorks Open Developer getting started","Register, test, publish, connect to customers; Backend Services and bulk patient groups"),n("https://fhir.eclinicalworks.com/ecwopendev/documentation/fhirresources/create/Communication.pdf","eClinicalWorks Communication create PDF","Creates a checklist note in the App Data tab; request Bundle shape and headers"),n("https://connect4.healow.com/apps/jsp/dev/signIn.jsp","healow Developer Portal sign-in","Separate portal and sign-up for healow integrations"),n("https://www.eclinicalworks.com/products-services/patient-engagement/messenger/","eClinicalMessenger","Automated reminders by voice, text, healow app or portal, and email; confirmations flow into the schedule")]},c={buildIdeasIntro:"Kipu’s API reads the scheduler, group sessions, care teams, admissions, and consent records for a treatment program. Pair that with BloomText and you can run staff coordination and carefully worded patient messages without anyone copying data by hand. Addiction treatment records carry 42 CFR Part 2 protections, so every idea below keeps treatment details out of the message text.",buildIdeas:[{title:"Care team roster sync",description:"When a therapist, nurse, or case manager is assigned to an episode in Kipu, your app flags their BloomText user for that patient’s care team conversation. When the assignment ends, it flags them for removal. Staff update the thread, so the people in it match the people on the chart.",vendorData:"Kipu episode care team data"},{title:"Group note signature nudges",description:"Kipu lists pending signers on each group session. A nightly job reads today’s groups and sends each pending signer a direct message in BloomText, so notes get signed before the shift ends instead of during the billing review.",vendorData:"Kipu group session data"},{title:"Morning admissions heads-up",description:"Read the day’s admissions for a location and post a count to the intake and nursing conversation, such as “3 admissions expected at the North campus today.” Staff get the plan early, and the message itself names no one.",vendorData:"Kipu admissions data, requested at the lowest detail level"},{title:"Consent-checked visit reminders",description:"Kipu’s scheduler already sends its own email and text reminders. Use BloomText when you want the reply to land in the same thread the care team works in. Before each send, check the episode’s consent form records and skip anyone without a complete, unexpired form.",vendorData:"Kipu scheduler appointments and consent form records"},{title:"Evening group logistics",description:"Outpatient and IOP groups move rooms and start times. Read the day’s group sessions and scheduler resources, then post plain logistics, like “Tonight’s 6:00 PM group meets in Room 4,” to the conversations your program uses for that group’s patients.",vendorData:"Kipu group sessions and scheduler resources"}],exampleProjects:[{title:"Group note signature nudge",summary:"A job that runs at the end of each day and reminds staff about group notes still waiting on their signature.",steps:["Sign each Kipu request with your access ID and secret key using HMAC-SHA256, as Kipu’s API docs describe.","Read today’s group sessions for one location and collect the users listed as pending signers.","Look up each signer’s direct-message conversation with the org admin whose OAuth token the job uses. Staff messages need that token; an API key can only message patients.","Post one short message per signer with the count of unsigned notes, and no patient names."],code:'GET https://api.kipuapi.com/api/group_sessions?app_id=<approved-app-id>&location_id=<approved-location-id>&session_start_date=<today>&session_end_date=<today>\nAccept: application/vnd.kipusystems+json; version=4\nDate: <rfc-1123-date>\nAuthorization: APIAuth-HMAC-SHA256 <approved-access-id>:<hmac-signature>\n\nPOST https://api.bloomtext.com/v1/me/conversations/{signerConversationId}/messages\n\n{"body":"You have 2 group notes from today waiting for your signature in Kipu."}'},{title:"Care team conversation roster",summary:"Keep each patient’s BloomText care team thread in step with the care team assigned in Kipu.",steps:["Read the episode’s care team from Kipu with the episode ID and patient master UUID.","Map each Kipu user ID to a BloomText user ID in your own table.","Compare against the care team you last saw for that patient.","Show the differences in your app so a staff member can update the thread in BloomText."],code:"GET https://api.kipuapi.com/api/episodes/<approved-episode-id>/care_team?app_id=<approved-app-id>&patient_master_id=<approved-patient-master-uuid>\nAccept: application/vnd.kipusystems+json; version=4\nDate: <rfc-1123-date>\nAuthorization: APIAuth-HMAC-SHA256 <approved-access-id>:<hmac-signature>"}
1,{title:"Next-day reminder with a consent check",summary:"Remind patients about tomorrow’s visits in neutral language, only where your program has the consent it requires on file.",steps:["Read tomorrow’s scheduler appointments for the location.","For each patient, read the episode’s consent form records and keep only those with the form your program requires, complete and unexpired.","Find the patient in BloomText by MRN.","Send a reminder that names only the time. Leave out the program name, visit type, and provider role."],code:'GET https://api.kipuapi.com/api/scheduler/appointments?app_id=<approved-app-id>&start_date=<tomorrow>&end_date=<tomorrow>&location_ids=<approved-location-id>\nAccept: application/vnd.kipusystems+json; version=4\nDate: <rfc-1123-date>\nAuthorization: APIAuth-HMAC-SHA256 <approved-access-id>:<hmac-signature>\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Reminder: you have a visit tomorrow at 10:00 AM. Reply here if you need to change it."}'}],aiAgent:{intro:"An agent with access to Kipu and BloomText can handle the coordination work that eats a treatment program’s day: telling staff what’s unsigned, who’s arriving, and which group moved rooms.",vendorTools:"Kipu doesn’t publish an MCP server, so you write a small tool that signs and sends Kipu requests with your approved credentials. Keep the tool narrow. Expose only the reads the job needs, such as today’s group sessions or an episode’s care team, and request admissions and census data at the lowest detail level that works.",steps:["The agent calls your Kipu tool for today’s group sessions or admissions.","It works out who needs to know, using your mapping of Kipu users to BloomText users.","It drafts short messages with times, rooms, and counts, and no patient names or treatment details.","It posts them, through an org admin’s OAuth connection, to the BloomText conversations that admin is part of, and replies in threads when staff ask questions."],examplePrompt:"Every weekday at 4:30 PM, check today’s group sessions in Kipu for the North campus. For each staff member with unsigned group notes, send them a BloomText direct message with how many are waiting. Don’t include patient names, group topics, or anything about treatment."},faqs:[{question:"Does Kipu have an API?",answer:"Yes. Kipu says it offers 41 APIs that read and write EMR data, including appointments, patients, users, consents, census, and occupancy. It supports GET, POST, and PATCH, and Kipu’s FAQ says writes center on patient data. The request reference is published as Swagger docs, and version 4 is required for treatment episode endpoints."},{question:"How do I get Kipu API access?",answer:"A Super Admin at the Kipu client opens Settings, then Integrations, then API Management, and adds either in-house or vendor access. Kipu says API use is a paid service. New vendors sign a vendor agreement, and access stays pending until Kipu activates it, which can take up to 48 hours. There is no public sandbox; a personal sandbox is a paid request through Client Support."},{question:"Can Kipu send text messages to patients?",answer:"Kipu’s Scheduler sends appointment messages by email or text, including confirmations, cancellations, and reminders. Kipu’s patient portal also has secure two-way messaging. The Kipu API doesn’t expose a messaging endpoint, so if you want texting driven by your own logic, you build it on another API such as BloomText."},{question:"Can I connect Kipu to ChatGPT, Claude, or an AI agent?",answer:"Not through an official Kipu MCP server; Kipu doesn’t document one. You can give an agent a tool you write that calls the Kipu API with your approved keys, and connect BloomText through the BloomText API with an organization API key. Treat what the agent reads as protected health information and keep it inside tools covered by your BAAs."},{question:"Is it HIPAA compliant to text patients using Kipu data?",answer:"It can be, with a BAA in place for each system that touches the data, and BloomText signs one. Addiction treatment records also fall under 42 CFR Part 2, which limits disclosure of information that identifies someone as receiving substance use disorder care. Get the consent your program requires, keep program names and treatment details out of message text, and have your compliance lead approve the templates."},{question:"Does Kipu set up the integration for me?",answer:"No. Kipu’s FAQ says it doesn’t offer API implementation services and supports only the API itself. Your developer builds and maintains the integration, and Kipu API support is available at [email protected]."}],sources:[n("https://kipuhealth.zendesk.com/hc/en-us/articles/28081319653531-API-Requests","Kipu API Requests","Super Admin API Management flow, paid service, vendor agreement, activation within 48 hours"),n("https://api.kipuapi.com/api-docs/index.html","Kipu API documentation (Swagger)","Base URL, HMAC-SHA256 signing, Accept header, scheduler, group session, care team, admissions, and consent endpoints"),n("https://kipuhealth.zendesk.com/hc/en-us/articles/15131682834075-Scheduler-Manage-Appointment-Communications","Kipu Scheduler: Manage Appointment Communications","Built-in email and text appointment messages"),n("https://kipuhealth.zendesk.com/hc/en-us/articles/9073929122459-My-Messages-Patient-Portal","Kipu My Messages (Patient Portal)","Secure two-way portal messaging and staff messaging"),n("https://www.ecfr.gov/current/title-42/chapter-I/subchapter-A/part-2","42 CFR Part 2","Confidentiality of substance use disorder patient records")]},l={apiName:"the PointClickCare API",buildIdeasIntro:"PointClickCare’s published FHIR API is read-focused: residents, encounters, care teams, resident contacts, locations, and clinical documents, plus bulk export for system-to-system apps. It has no appointment or messaging resources, so these ideas use BloomText for the conversations and PointClickCare as the source of who, where, and when.",buildIdeas:[{title:"Care-team rosters that follow the resident",description:"Each resident’s care coordination conversation should hold the nurses, therapists, and attending physician actually assigned to them. Read the resident’s CareTeam from PointClickCare, match each practitioner to a BloomText user, and flag anyone to add or remove when the roster changes.",vendorData:"PointClickCare CareTeam and Practitioner resources"},{title:"Admission huddle posts for each unit",description:"When a new stay starts, post a short note to the unit’s team conversation so the charge nurse, CNAs, and dietary know to expect someone and when the huddle is. The note names the unit and time, not the reason for admission.",vendorData:"PointClickCare Encounter and Location resources"},{title:"Responsible-party updates for families",description:"PointClickCare lists each resident’s contacts as RelatedPerson records. Your app links a resident’s responsible party to an existing family conversation in BloomText and posts logistics there: a care conference time, a room move, visiting changes. Staff answer replies in the same thread.",vendorData:"PointClickCare Patient and RelatedPerson resources"},{title:"Transfer paperwork heads-up",description:"When a resident goes out to the hospital, the receiving team needs the continuity of care document fast. Watch for a new CCD in DocumentReference and tell the transfer conversation it is ready to pull from PointClickCare, without pasting its contents into chat.",vend
1orData:"PointClickCare DocumentReference resource (CCD)"},{title:"Morning census note for administrators",description:"A Bulk app can export a group of residents through the FHIR $export operation. Count current residents per building overnight and post one line per facility to the leadership conversation before stand-up.",vendorData:"PointClickCare Group resource and bulk $export"}],exampleProjects:[{title:"Care-team roster sync",summary:"A nightly job that keeps each resident’s BloomText care conversation in step with the active PointClickCare care team.",steps:["For each resident you store in BloomText by MRN, read their active CareTeam from PointClickCare.","Match each care-team practitioner to a BloomText user ID in your own lookup table.","Compare against the care team you saw last night.","Show the differences in your app so a staff member can update the care conversation in BloomText."],code:"GET https://connect2.pointclickcare.com/fhir/R4/<approved-tenant-id>/CareTeam?patient=<approved-patient-id>&status=active\nAuthorization: Bearer <approved-access-token>\nAccept: application/fhir+json"},{title:"New admission huddle poster",summary:"Every hour, look for stays that started since the last run and post a huddle note to the right unit’s conversation.",steps:["Search Encounter by date for stays that began since your last run. Confirm your approved app and scopes cover every resident in the building.","Read the encounter’s Location to find the unit.","Look up the unit’s team conversation, one that the org admin whose OAuth token the job uses is part of. Staff messages need that token; an API key can only message patients.","Post the huddle note and thread follow-up questions under it with reply_to_message_id."],code:'GET https://connect2.pointclickcare.com/fhir/R4/<approved-tenant-id>/Encounter?date=ge<last-run-date>\nAuthorization: Bearer <approved-access-token>\nAccept: application/fhir+json\n\nPOST https://api.bloomtext.com/v1/me/conversations/{unitConversationId}/messages\n\n{"body":"New admission arriving on 2 West this afternoon. Huddle at 3:00 PM at the nurses’ station."}'},{title:"Resident conversation archive",summary:"Pull a resident’s messages for a date range when your compliance team needs them on file.",steps:["Read the resident’s messages for the date range, across all their conversations.","Follow the pagination cursor until you have every page.","Store the file in your records system. PointClickCare’s published FHIR API is read-only for resident records, so staff attach it in PointClickCare by hand if needed."],code:"GET https://api.bloomtext.com/v1/patient-messages?patient_id={residentPatientId}&after=2026-08-01&before=2026-09-01&order=asc&page[limit]=100"}],aiAgent:{intro:"In a skilled nursing or senior living building, an agent with PointClickCare data and BloomText can keep care-team conversations staffed correctly, draft family updates for a nurse to approve, and summarize a unit’s threads at shift change.",vendorTools:"You give the agent PointClickCare data through a small tool you write that calls the FHIR API with your approved SMART credentials and returns only the fields the task needs, like care-team members or a resident’s unit. PointClickCare does not document an MCP server or a way to connect outside agents such as Claude or ChatGPT, so the tool is yours to build and host.",steps:["The agent calls your PointClickCare tool for the residents on one unit and their care teams.","It finds each resident in BloomText by MRN through your app’s lookup.","It reads each resident’s messages from the last day to see what is still open.","It posts a shift-change summary to the unit conversation through an org admin’s OAuth connection, and flags anything that needs a nurse."],examplePrompt:"For 2 West, get each resident’s active care team from PointClickCare. Check that each resident’s BloomText care conversation includes everyone on that team and list any mismatches. Then read the last 24 hours of messages in those conversations and post a short shift-change summary of unanswered questions to the 2 West team conversation. Do not include diagnoses or medications."},faqs:[{question:"Does PointClickCare have an API?",answer:"Yes. PointClickCare publishes a FHIR R4 API built on US Core, with read and search across 28 resources including Patient, Encounter, CareTeam, RelatedPerson, and DocumentReference, plus bulk export through Group. Requests go to connect2.pointclickcare.com with your tenant ID in the path. Approved Marketplace partners also get PointClickCare’s proprietary APIs, whose documentation is behind the developer portal."},{question:"How do I get PointClickCare API access, and what does it cost?",answer:"Submit PointClickCare’s partnership application, then create a Developer Program account as a USCD
1I Connector or Marketplace Partner, turn on two-factor authentication, and register your app. Development apps are auto-approved in the FHIR sandbox, and production apps need PointClickCare approval. The FHIR site lists a flat fee of $65 per app per facility per month for customers on current pricing, and the Marketplace partner agreement charges a fee per facility with a live integration."},{question:"Does the PointClickCare API include appointments or messaging?",answer:"Not in the published FHIR API. Its resource list has no Appointment or Communication resource and no subscriptions or webhooks, and writes are limited to creating Groups for export. Plan to read resident data from PointClickCare and keep the conversation itself in BloomText."},{question:"Does PointClickCare have text messaging for families?",answer:"Yes. PointClickCare sells Automated Care Messaging, powered by Cliniconex, which sends voice, text, and email notices to residents and families from inside the EHR. Teams use BloomText when they want care-team chat and family conversations in one app, driven from their own software through the BloomText API."},{question:"Can I connect PointClickCare to ChatGPT, Claude, or another AI agent?",answer:"Yes, through tools you build. Your agent reads and sends BloomText messages through the BloomText API, with an organization API key. For PointClickCare, the agent calls your own tool that uses your approved FHIR credentials, because PointClickCare does not document an MCP server or an agent connector."},{question:"Is it HIPAA compliant to message families using PointClickCare data?",answer:"It can be when every system that touches the data is covered. BloomText turns on API access only for organizations with a signed BAA, and PointClickCare only lets users reach records their accounts are authorized for. Keep family messages to logistics like times and room changes, and confirm the resident has authorized who you share updates with."}],sources:[n("https://developer.pointclickcare.com/spa/why-pcc","PointClickCare Marketplace and USCDI Connector programs","Program types, partnership approval before account enablement, and Marketplace per-facility fee terms"),n("https://pointclickcare.com/products/automated-care-messaging/","PointClickCare Automated Care Messaging","Voice, text, and email to residents and families, powered by Cliniconex")]},d={buildIdeasIntro:"An ABA schedule changes all day. RBTs call out, parents cancel, and BCBAs shuffle supervision. Rethink’s Live API exposes appointments, session notes, client staff assignments, and staff credentials, so you can turn those changes into messages for families and case teams in BloomText.",buildIdeas:[{title:"Session change notices for parents",description:"Poll Rethink for appointments modified since your last run. When a session’s start time moves or it picks up a cancellation, post a short note to that family’s BloomText conversation so the caregiver hears it before the RBT is at the door.",vendorData:"Rethink appointments, filtered by last-modified time"},{title:"Case team threads that follow assignments",description:"Each client in Rethink has staff assignments. Mirror them in BloomText by flagging the assigned RBTs and BCBA who are missing from the client’s case team conversation, and staff whose assignment was deleted. A new RBT can join the thread on day one.",vendorData:"Rethink client staff assignments"},{title:"Makeup session board",description:"A cancelled session is open time for another client with unused authorized hours. When Rethink shows a cancellation, post the time slot and location to your scheduling team’s conversation so a coordinator can fill it quickly.",vendorData:"Rethink appointment times, locations, and cancellation types"},{title:"Session note and signature follow-ups",description:"Rethink records session note status and parent verification on each appointment. An end-of-day job counts what’s still open for each RBT and sends a direct message, like “2 sessions from today still need a caregiver signature.”",vendorData:"Rethink session notes and appointment verification fields"},{title:"Credential expiration reminders",description:"RBT certifications and BCBA licenses lapse on a date. Read each staff member’s credentials from Rethink and message them, and your clinical director, 30 days before the expiration date, so nobody gets pulled from the schedule.",vend
1orData:"Rethink staff credentials"}],exampleProjects:[{title:"Schedule change notice to families",summary:"A job that runs every few minutes and tells caregivers when a session time changes or is cancelled.",steps:["Search Rethink appointments modified since the timestamp of your last run.","Compare each appointment’s scheduled start and cancellation type with the copy you stored last time.","Find the client in BloomText by MRN, storing the Rethink client ID as the MRN.","Send the new time or the cancellation, then save the new timestamp."],code:'GET https://<approved-rethink-api-base>/appointments/search?after=<last-run-utc>&Page=1&PageSize=500\nAuthorization: Bearer <approved-jwt>\nAccept: application/json\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Today’s session now starts at 3:30 PM instead of 3:00 PM."}'},{title:"Case team roster sync",summary:"Keep each client’s BloomText case team conversation matched to the staff assigned in Rethink.",steps:["Read the client’s staff assignments from Rethink.","Map each Rethink staff ID to a BloomText user ID in your own table.","Compare against the assignments you saw last time.","Show the differences in your app so a staff member can update the case team conversation in BloomText."],code:"GET https://<approved-rethink-api-base>/clients/<approved-client-id>/assignments\nAuthorization: Bearer <approved-jwt>\nAccept: application/json"},{title:"End-of-day note reminder for RBTs",summary:"Remind each RBT about session notes that aren’t finished yet, without naming clients.",steps:["Read session notes changed since the start of the day.","Group incomplete notes by the staff member on each appointment.","Look up each RBT’s direct-message conversation with the org admin whose OAuth token the job uses. Staff messages need that token; an API key can only message patients.","Send one message per RBT with a count."],code:'GET https://<approved-rethink-api-base>/appointments/sessionnotes?after=<start-of-day-utc>\nAuthorization: Bearer <approved-jwt>\nAccept: application/json\n\nPOST https://api.bloomtext.com/v1/me/conversations/{rbtConversationId}/messages\n\n{"body":"You have 3 session notes from today to finish in Rethink before 7:00 PM."}'}],aiAgent:{intro:"An agent connected to Rethink and BloomText can act like a scheduling coordinator’s assistant: spotting cancelled sessions, telling the right family and RBT, and flagging open slots for makeup sessions.",vendorTools:"Rethink’s published API pages don’t describe an MCP server. Write a small tool that calls the Rethink Live API with the credentials your Customer Success Manager issues, and give the agent only the reads it needs, such as appointments changed since a timestamp or a client’s staff assignments.",steps:["The agent calls your Rethink tool for appointments changed since its last check.","It sorts the changes into time moves, cancellations, and new sessions.","It sends short notices to families with your API key, and posts to case team threads through an org admin’s OAuth connection.","It lists open slots in the scheduling team’s conversation, which that admin is part of, and answers follow-up questions there."],examplePrompt:"Every 15 minutes during business hours, check Rethink for sessions changed since your last run. For each cancellation, tell the family and the assigned RBT in BloomText, then post the open time and location in the Scheduling conversation. Use first names only and never mention goals, behaviors, or diagnoses."},faqs:[{question:"Does RethinkBH have an API?",answer:"Yes. Rethink offers a Live API with real-time data and a Data Warehouse that updates nightly. The Live API covers company account data, clients, staff, appointments, and funders. Rethink publishes the specs on SwaggerHub, including appointment search, session notes, client contacts, and staff assignments."},{question:"How do I get Rethink API access?",answer:"Ask your Rethink Customer Success Manager. Rethink says the CSM provides the credentials and Swagger documents, and that both the APIs and the Data Warehouse carry a cost. The Data Warehouse also requires a business intelligence tool such as Power BI or Tableau. There is no self-serve developer signup."},{question:"Can RethinkBH text parents?",answer:"Rethink’s ParentHub sends videos, messages, photos, and tips to parents, who sign in with an email or phone number. The Rethink API doesn’t include a messaging endpoint. If you want messages driven by your own schedule logic, you send them through another API such as BloomText."},{question:"Can I connect Rethink to ChatGPT, Claude, or an AI agent?",answer:"Rethink doesn’t document an MCP server or an agent connector for its API. Rethink’s own AI features include Session Note AI and BillAI. For your own agent, write a tool that calls the Rethink API with your approved credentials and connect BloomText through the BloomText API with an organization API key."},{question:"Is it HIPAA compliant to message families using Rethink data?",answer:"It can be, if each system that handles client data is covered by a BAA, and BloomText signs one. Keep messages to logistics like session times and cancellations. Leave out behavior data, goals, and diagnoses, since a caregiver’s phone may be shared."},{question:"Can I create appointments in Rethink through the API?",answer:"Yes. Rethink’s Appointment API has add, update, and delete requests alongside appointment search. Rethink’s API overview also lists writes for client profiles, contacts, staff assignments, and staff credentials."}],sources:[n("https://app.swaggerhub.com/search?owner=Rethink-BH","Rethink API specs on SwaggerHub","Published Live API specs for appointments, clients, contacts, staff, and assignments"),n("https://app.swaggerhub.com/apis/Rethink-BH/rethink.appointmentapi.v1/1.0.0","Rethink Appointment API v1","Appointment search by last-modified time, session notes, JWT bearer auth, add/update/delete"),n("https://app.swaggerhub.com/apis/Rethink-BH/staffassignment.api.v1.0.0/1.0.1","Rethink Staff Assignments API v1","Read, add, and remove client staff assignments"),n("https://app.swaggerhub.com/apis/Rethink-BH/staff.api.v1.0.0/1.0.0","Rethink Staff API v1","Staff profiles and credentials with expiration dates"),n("https://www.rethinkbehavioralhealth.com/our-solutions/turn-parent-engagement-better-outcomes/","RethinkBH ParentHub","Parent messages, videos, and email or phone login")]},h={apiName:"SimplePractice and the BloomText API",projectsName:"SimplePractice integration",buildIdeasIntro:"SimplePractice says plainly that it does not offer a public API for practices. Its only programmatic access is the enterprise scheduling integration now sold as SimpleConnect, for health plans, EAPs, and health systems. So most of what a solo therapist or group practice builds lives on the BloomText side, next to SimplePractice rather than 
1inside it.",buildIdeas:[{title:"A reply path next to one-way reminders",description:"SimplePractice sends text reminders from an unmonitored number, and you are not notified if a client texts back anything besides confirm or cancel. Keep those reminders, and give clients a BloomText conversation for everything else. An app that reads new BloomText messages routes each reply to the right clinician.",vendorData:"no SimplePractice data; it runs beside SimplePractice reminders"},{title:"EAP and health plan referral follow-up",description:"If your organization is an approved SimpleConnect partner, schedulers can see in-network SimplePractice clinicians’ availability and request an appointment. After a request goes out, message the member in their BloomText conversation so they know what happens next and have somewhere to ask.",vendorData:"SimplePractice Enterprise availability and appointment requests, for approved partners"},{title:"Group practice intake desk",description:"An intake coordinator fields new inquiries and hands each one to a clinician 
1with an opening. Post the handoff to a team conversation, name the clinician, and track who picked it up with a reaction. The clinical intake itself stays in SimplePractice.",vendorData:"staff entry of the new client in SimplePractice"},{title:"Client-to-patient matching from an export",description:"The Account Owner can export client contacts from SimplePractice as a vCard file. Your script reads it once and imports the clients as BloomText patients, which matches anyone BloomText already has by phone or email instead of duplicating them. Rerun it when you onboard a batch of new clients.",vendorData:"a SimplePractice Contacts data export"},{title:"Message records for a records request",description:"When a client asks for their records, SimplePractice’s data export covers the chart and its Secure Messages. Pull the client’s BloomText messages for the same dates so the text history goes into the same response.",vendorData:"a SimplePractice data export for the same client"}],exampleProjects:[{title:"After-hours reply router",summary:"Answer client texts that arrive after the practice closes and alert the on-call clinician. SimplePractice isn’t called; this runs on BloomText alone.",steps:["Every few minutes, read client messages sent since you last checked, with your API key.","Skip messages sent by your own staff, and read the last few messages for context.","Outside office hours, reply to the client with your after-hours number and crisis resources.","Post a one-line alert in the on-call conversation with the client’s first name only. This post uses an org admin’s OAuth token, since API keys can’t reach staff conversations."],code:'GET https://api.bloomtext.com/v1/patient-messages?after={lastChecked}&q=from:patient&order=asc\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{clientPatientId}"},"body":"Thanks for your message. The office is closed and we will reply tomorrow morning. If this is an emergency, call 911 or 988."}\n\nPOST https://api.bloomtext.com/v1/me/conversations/{onCallConversationId}/messages\n\n{"body":"After-hours text from Sam in their client conversation. Auto-reply sent."}'},{title:"Referral acknowledgement for an EAP care team",summary:"For an EAP or health plan with approved SimpleConnect access, confirm each appointment request to the member in BloomText.",steps:["Request the appointment through your organization’s approved SimpleConnect integration, using the request shapes SimplePractice gave you.","Find the member in BloomText by MRN.","Send a short note that the request is with the clinician.","Watch for the member’s reply so a care coordinator can pick it up."],code:'POST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{memberPatientId}"},"body":"We sent your appointment request to the counselor you picked. You should hear back within 2 business days. Reply here with any questions."}'},{title:"Records-request message history",summary:"Pull a client’s BloomText message history for a date range to go with a SimplePractice data export.",steps:["Start the SimplePractice data export for the client from Settings, as the Account Owner or a permitted practice manager.","Read the client’s BloomText messages for the same dates, following the pagination cursor to the last page.","Send both through your usual records process."],code:"GET https://api.bloomtext.com/v1/patient-messages?patient_id={clientPatientId}&after=2026-01-01&before=2026-07-01&order=asc&page[limit]=100"}],aiAgent:{intro:"For a therapy practice, an agent on BloomText can triage the messages between sessions: sort scheduling questions from things a clinician must see, draft replies, and keep the on-call clinician informed.",vendorTools:"SimplePractice has no public API and no documented MCP server or AI connector, so a practice-level agent can’t read SimplePractice live. It works from BloomText, plus anything staff hand it, such as a short list of tomorrow’s appointment times. Tools that claim to connect SimplePractice to Claude by driving its web app are not SimplePractice products; check your SimplePractice terms before you use one.",steps:["The agent reads new messages in client conversations since the last run, through an org admin’s OAuth connection.","It labels each one as scheduling, billing, or needs a clinician.","It drafts replies to scheduling questions and leaves the rest untouched.","It posts a summary to the clinician’s team conversation and reacts to the messages it handled."],examplePrompt:"Read every client message in BloomText since 6 PM yesterday. Reply to simple scheduling questions with our booking line, 555-0142. Don’t answer anything else. Post a list of the messages a clinician needs to read in the Clinicians conversation, first names only."},faqs:[{question:"Does SimplePractice have an API?",answer:"Not for practices. SimplePractice’s help center says it doesn’t currently offer a public-facing API for integrations with other software. The one exception is its enterprise scheduling API, launched in 2022 and n
1ow part of SimpleConnect, which lets EAPs and health plans view in-network clinicians’ availability and request appointments."},{question:"How do I get SimplePractice API access?",answer:"If you are a health plan, EAP, employer, or health system, contact SimplePractice through the SimpleConnect page and confirm eligibility and request details with them. A private practice can’t get API credentials. The documented ways to move practice data out are the data export, run by the Account Owner or a permitted practice manager, and calendar sync."},{question:"Does SimplePractice send text messages to clients?",answer:"Yes. SimplePractice sends appointment reminders by email, text, or voice, with an optional confirm or cancel link, on its Essential and Plus plans. The texts come from an unmonitored number, so you aren’t notified about other replies. For two-way conversations it offers Secure Messaging in the Client Portal, where clients get an email when a new message arrives."},{question:"Can I connect SimplePractice to ChatGPT or Claude?",answer:"Not directly through anything SimplePractice publishes. You can build an agent with Claude, ChatGPT, or another model that calls the BloomText API with an organization API key, and have it work on your client messages. SimplePractice data reaches the agent only through what staff give it or an approved enterprise integration."},{question:"Can I use BloomText without a SimplePractice integration?",answer:"Yes. Most therapy practices run the two side by side: SimplePractice for the chart, billing, and reminders, BloomText for texting clients and chatting with the team. The BloomText API is there when you want to automate the BloomText side."},{question:"Is it HIPAA compliant to text therapy clients?",answer:"It can be, when the texting service signs a BAA and you keep texts to logistics. BloomText turns on API access only for organizations with a signed BAA. Leave session content, diagnoses, and anything else a client wouldn’t want on a lock screen out of texts, and move those conversations to a session or the portal."}],sources:[n("https://support.simplepractice.com/hc/en-us/articles/360034957931-Comparing-SimplePractice-features-by-plan","Comparing SimplePractice features by plan","FAQ: no public-facing API for integrations"),n("https://www.simplepractice.com/press/simplepractice-enterprise-launches-api/","SimplePractice Enterprise API launch (Sept. 2022)","EAP and MCO schedulers view overlapping providers’ availability and request appointments"),n("https://support.simplepractice.com/hc/en-us/articles/42052535058957-Setting-up-appointment-reminders","Setting up appointment reminders","Email, text, and voice reminders on Essential and Plus; lead times"),n("https://support.simplepractice.com/hc/en-us/articles/42050891133581-Customizing-appointment-reminder-templates","Customizing appointment reminder templates","Text reminders come from an unmonitored, no-reply number"),n("https://support.simplepractice.com/hc/en-us/articles/42052510111629-Adding-a-confirm-or-cancel-option-in-text-and-voice-reminders","Confirm or cancel in text and voice reminders","Confirm and cancel links in text reminders"),n("https://support.simplepractice.com/hc/en-us/articles/115003629583-Using-Secure-Messaging-with-clients","Using Secure Messaging with clients","Client Portal messaging and email notifications"),n("https://support.simplepractice.com/hc/en-us/articles/207625506-Exporting-client-information-through-data-exports","Exporting client information through data exports","Complete, Sessions, and Contacts (vCard) exports; who can run them"),n("https://support.simplepractice.com/hc/en-us/articles/33641781380365-Getting-started-with-calendar-sync","Getting started with calendar sync","Calendar sync with Apple, Google, and Outlook calendars")]},p={apiName:"WebPT integrations",projectsName:"WebPT integration",buildIdeasIntro:"WebPT doesn’t offer a public REST API. It connects to other systems through HL7 interfaces its integration team sets up per clinic: inbound patient registration, outbound billing, outbound documentation, inbound documentation, and custom work. These ideas 
1start from those feeds, received by your own interface engine or listener.",buildIdeas:[{title:"Welcome texts for new referrals",description:"When a hospital or physician group sends a registration (ADT) message that creates the patient in WebPT, your listener sees the same message. It posts a welcome in the patient’s BloomText conversation with what to bring to the first visit and how to finish intake.",vendorData:"the inbound HL7 ADT patient registration feed"},{title:"Note-signed alerts for the front office",description:"WebPT sends an MDM or ORU message whenever a document is completed. Your app turns that into a one-line post in the internal team conversation so the front desk knows to fax the progress note or plan of care to the referring provider.",vendorData:"WebPT outbound documentation (HL7 MDM/ORU)"},{title:"Post-discharge check-ins",description:"When the discharge summary comes through the documentation feed, schedule a check-in two weeks later asking how the home program is going. Replies go to the treating therapist’s inbox in BloomText instead of a voicemail box.",vendorData:"WebPT outbound documentation (HL7 MDM/ORU)"},{title:"Billing hand-offs to the business office",description:"WebPT’s outbound billing interface sends ADT, BAR, and DFT transactions to your billing system. Mirror a count of the day’s charge batches into the billing team’s conversation so someone notices when a clinic hasn’t sent any.",vendorData:"WebPT outbound billing (HL7 ADT/BAR/DFT)"},{title:"Missed-visit follow-up through a custom interface",description:"A plan of care often calls for two or three visits a week, and one missed visit can stall progress. Scheduling data isn’t in WebPT’s standard interface list, so ask WebPT about a custom integration before you build outreach for cancellations and no-shows.",vendorData:"a custom WebPT interface, if WebPT agrees to build one"}],exampleProjects:[{title:"Documentation-complete notifier",summary:"A small HL7 listener that posts to the front office conversation each time a therapist signs a note in WebPT.",steps:["Work with WebPT’s integration team to point the outbound documentation interface at your listener.","Parse each MDM or ORU message for the document type and the WebPT patient ID. Ignore the note text.","Post a short message to the front office team conversation with an org admin’s OAuth token. The admin must be in that conversation; an API key can only message patients.","Staff react to the post when the note has gone to the referring provider."],code:'POST https://api.bloomtext.com/v1/me/conversations/{frontOfficeConversationId}/messages\n\n{"body":"Progress note signed for chart 48213. Ready to send to the referring provider."}'},{title:"New referral welcome",summary:"Send a first-visit welcome as soon as a referring system registers the patient.",steps:["Receive a copy of the ADT registration messages your referral partners send into WebPT.","Find the patient in BloomText by MRN or phone number. If more than one patient matches, alert staff instead of guessing.","Send the welcome message, then check the patient’s messages for questions."],code:'POST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Welcome to Desert Ridge Physical Therapy. Wear comfortable clothes to your first visit and arrive 15 minutes early to finish your forms."}\n\nGET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=10'}],aiAgent:{intro:"For a rehab clinic, an agent that sees WebPT interface events and your BloomText conversations can draft patient check-ins, route replies to the right therapist, and keep the front office posted on paperwork.",vendorTools:"WebPT doesn’t document an MCP server or a public API an agent could call. The practical path is to store the HL7 events your interfaces receive in your own database and give the agent a small read-only tool over that store, such as “list documents completed today.”",steps:["The agent calls your tool to list today’s completed WebPT documents and new registrations.","It finds each patient in BloomText by MRN.","It reads each patient’s recent messages so it doesn’t repeat what staff already sent.","It sends wel
1come or check-in messages with your API key, and summarizes anything that needs a therapist in the team conversation through an org admin’s OAuth connection."],examplePrompt:"Look at yesterday’s WebPT discharge summaries in our interface store. For each patient discharged exactly 14 days ago, send a short check-in in BloomText asking how their home exercises are going. List any patient you couldn’t match in the front office thread."},faqs:[{question:"Does WebPT have an API?",answer:"Not a public one. WebPT doesn’t publish a developer portal or self-serve API keys. It integrates through HL7 interfaces that its team sets up and monitors: inbound patient registration, outbound billing, outbound documentation, inbound documentation, and custom integrations."},{question:"How do I get access to WebPT data for an integration?",answer:"Contact WebPT through its integrations or partners page. For a clinic’s own project, WebPT assigns a point of contact for the interface build. For a product you want to offer to many clinics, use the partner inquiry on the partners page."},{question:"Does WebPT send appointment reminder texts?",answer:"Yes. WebPT’s scheduling product sends automated text, phone, and email reminders to scheduled patients. Clinics use BloomText for the conversations around that: two-way patient messaging and HIPAA-compliant team chat, driven from their own software through the BloomText API."},{question:"Can I get WebPT appointment data for my own reminders?",answer:"Scheduling isn’t one of WebPT’s standard interface types. Ask WebPT whether a custom integration can cover it for your clinic before you plan reminders around it."},{question:"Can I connect WebPT to ChatGPT, Claude, or another AI agent?",answer:"WebPT doesn’t document a connector for AI agents. You can give an agent access to the events your HL7 interfaces receive through a tool you write, and connect it to BloomText through the BloomText API with an organization API key."},{question:"Is it HIPAA compliant to text physical therapy patients from WebPT data?",answer:"It can be when each system is covered. BloomText turns on API access only for organizations with a signed BAA, and your interface listener and database need the same safeguards. Keep texts to logistics like visit times and paperwork, not diagnoses or progress details."}],sources:[n("https://www.webpt.com/integrations","WebPT integrations","HL7 interface types, integration point of contact and monitoring, 60+ integrated vendors"),n("https://www.webpt.com/products/scheduling","WebPT scheduling","Automated text, phone, and email appointment reminders")]},m={athenahealth:o,centralreach:s,dentrix:i,eclinicalworks:r,generic:{apiName:"the BloomText API and your EMR",buildIdeasIntro:"Most EMR integrations follow the same shape: read a schedule or patient record from the EMR, find the matching BloomText patient by MRN or phone number, and send them a message or read their replies.",buildIdeas:[{title:"Appointment reminders",description:"A nightly job reads tomorrow’s appointments from your EMR and sends each patient a reminder in their BloomText conversation. Replies land in the same thread your front desk already works from.",vendorData:"your EMR’s appointment and patient data"},{title:"Intake and forms nudges",description:"When a new patient is booked but their intake packet is still open in the EM
1R, send a short nudge with the link your practice already uses. Stop nudging once the EMR marks the forms complete.",vendorData:"your EMR’s appointment status and forms status"},{title:"Staff alerts in team chat",description:"Post into an internal BloomText group when something in the EMR needs a person: a same-day cancellation, a new referral, or an unsigned note. Staff discuss it where they already talk.",vendorData:"your EMR’s schedule changes and task lists"},{title:"Reply routing",description:"Check each reminded patient’s BloomText messages for replies and route them. A “C” reply to a reminder can confirm the appointment in the EMR, while anything else goes to a staff queue.",vendorData:"your EMR’s appointment confirmation field"},{title:"Conversation archiving",description:"Pull a patient’s messages for a date range on a schedule and attach them to the patient’s chart, so the EMR holds a copy of what was said by text.",vendorData:"your EMR’s document upload endpoint"}],exampleProjects:[{title:"Next-day reminder job",summary:"A scheduled script that reminds every patient booked for tomorrow.",steps:["Pull tomorrow’s appointments from your EMR’s scheduling API.","Find each patient in BloomText by MRN, or send to their phone number, which creates the patient if needed.","Send one reminder per appointment with an Idempotency-Key derived from the appointment ID and date, so a rerun never double-sends.","Log the returned message ID next to the appointment."],code:'POST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Reminder: you have an appointment tomorrow at 9:30 AM. Reply C to confirm."}'},{title:"Confirmation sync",summary:"A small job that turns patient replies into confirmations.",steps:["Every few minutes, read patient replies sent since you last checked.","Check whether each new message answers a reminder you sent.","Mark the appointment confirmed in your EMR, then send the patient a short confirmation so staff can see it was handled."],code:'GET https://api.bloomtext.com/v1/patient-messages?after={lastChecked}&q=from:patient\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{patientId}"},"body":"Thanks, you’re confirmed."}'}],aiAgent:{intro:"An AI agent with access to both systems can handle the routine back-and-forth for a front desk: answering scheduling questions, sending reminders, and handing anything clinical to a person.",vendorTools:"Give the agent a small tool that calls your EMR’s API with your approved credentials, such as “look up tomorrow’s appointments” or “mark appointment confirmed.” Keep those tools narrow and read-only where you can. On the BloomText side, the agent calls the BloomText API with your organization’s API key, always naming the patient.",steps:["Check each patient with an upcoming visit for new replies, with `q=from:patient` on their messages.","Read the patient’s recent messages for context.","Call your EMR tool to look up the facts the reply needs, like the appointment time.","Send the patient a reply, or flag the conversation in your app when a person should take over."],examplePrompt:"When a patient asks about their next appointment, look it up in the EMR and reply to them in BloomText with the date and time. If they ask anything clinical, don’t answer. Add the patient to the “Needs staff reply” list in our app."},faqs:[{question:"Can I connect my EMR to BloomText?",answer:"Yes. You write a small integration that reads from your EMR’s API and calls the BloomText API. BloomText handles the messaging side: patients, messages, delivery status, and campaigns, with an organization API key. Store each EMR patient’s ID as the BloomText patient’s MRN."},{question:"What if my EMR doesn’t have a public API?",answer:"Many EMRs gate API access behind a partner program, an admin request, or a paid add-on. Ask your EMR vendor for its approved access process. You can still build the BloomText side first and plug in the EMR data once access is approved."},{question:"Can the BloomText API send texts to any phone number?",answer:"Yes. The API sends a message to a patient by patient ID or phone number, and a new number creates the patient. Messages go by secure link by default, or plain SMS if you ask, and every message lands in a BloomText conversation your staff can see."},{question:"Can I connect my EMR and BloomText to ChatGPT or Claude?",answer:"Yes, with an agent you build. Have an org admin create a BloomText API key, and give the agent tools that call the BloomText API and your EMR’s API. Every BloomText call names the patient, and messages it sends show the key’s name to staff."},{question:"Is it HIPAA compliant to text patients from EMR data?",answer:"BloomText only gives API access to organizations with a signed BAA, and every message stays inside a BloomText conversation your staff can audit. Keep message content to what the patient needs, such as appointment times, and follow your own EMR vendor’s terms for the data you read."}]},kipu:c,pointclickcare:l,rethinkbh:d,simplepractice:h,webpt:p,wellsky:{apiName:"the WellSky API",buildIdeasIntro:"WellSky’s APIs differ by product. The Personal Care Connect API covers home care shifts, clients, caregivers, and webhooks. The WellSky FHIR APIs, including the one for Hospice and Palliative, are read-only clinical data. These ideas are built for agencies whose caregivers and clinicians spend the day in the field.",buildIdeas:[{title:"Tomorrow’s shifts for each caregiver",description:"Every evening, search each caregiver’s shifts for the next day and post the start times to the conversation they share with the scheduler. A caregiver who can’t make it replies in the thread, and the scheduler sees it before the morning scramble.",vend
1orData:"WellSky Personal Care Appointment (shift) search"},{title:"Weekly visit schedule for families",description:"Families want to know who is coming and when. Search a client’s shifts by week number and post the visit times to the family conversation every Sunday. Leave caregiver phone numbers and care details out of the message.",vendorData:"WellSky Personal Care Appointment (shift) search"},{title:"Visit-finished notes",description:"Subscribe to the Connect API’s clock-out event. When a caregiver clocks out, your app posts a short “today’s visit wrapped up” note to that client’s family conversation, so the daughter at work doesn’t have to call the office.",vendorData:"WellSky Personal Care Subscription (encounter.clockout.changed)"},{title:"Remove caregivers who leave",description:"The practitioner.deactivated.changed event fires when a caregiver is deactivated. Your app removes that person from every client conversation they were in and tells the scheduler which clients need a new caregiver.",vend
1orData:"WellSky Personal Care Subscription and Practitioner data"},{title:"Hospice interdisciplinary team rooms",description:"A hospice patient’s nurse, aide, social worker, and chaplain all need the same thread. Read the patient’s CareTeam from the Hospice and Palliative FHIR API and flag any differences from the BloomText conversation’s participants so staff can update it.",vendorData:"WellSky Hospice and Palliative FHIR CareTeam and Practitioner reads"}],exampleProjects:[{title:"Next-day shift reminders",summary:"A 6 PM job that sends each caregiver their shifts for tomorrow.",steps:["Get an access token from the Connect API with your agency’s client ID and secret.","Search shifts for each caregiver with tomorrow’s date in YYYYMMDD format.","Look up each caregiver’s direct-message conversation with the org admin whose OAuth token the job uses, and skip anyone without one. Staff messages need that token; an API key can only message patients.","Post one message listing their start times."],code:'POST https://connect.clearcareonline.com/oauth/accesstoken\nContent-Type: application/json\n\n{"client_id":"<approved-client-id>","client_secret":"<approved-client-secret>","grant_type":"client_credentials"}\n\nGET https://connect.clearcareonline.com/v1/appointment/?caregiverId=<approved-caregiver-id>&startDate=<tomorrow-yyyymmdd>\nAuthorization: Bearer <approved-access-token>\n\nPOST https://api.bloomtext.com/v1/me/conversations/{caregiverConversationId}/messages\n\n{"body":"Your shifts tomorrow: 8:00 AM and 2:30 PM. Reply here if anything changes."}'},{title:"Clock-out notes to families",summary:"A webhook listener that turns WellSky clock-out events into a one-line update in the family conversation.",steps:["Create a Connect API subscription for encounter.clockout.changed that points at your endpoint and sends a secret header you check.","When a notification arrives, read the encounter to find the client.","Find the family contact in BloomText by MRN.","Send the update. Keep it to the time; shift notes stay in WellSky’s Family Room."],code:'POST https://connect.clearcareonline.com/v1/subscriptions/\nAuthorization: Bearer <approved-access-token>\nContent-Type: application/json\n\n{"resourceType":"Subscription","status":"active","criteria":"encounter.clockout.changed","channel":{"type":"rest-hook","endpoint":"https://<your-app>/wellsky/clockout","payload":"application/fhir+json","header":["Authorization: Bearer <your-webhook-secret>"]},"meta":{"tag":[{"code":"agencyId","display":"<approved-agency-id>"}]}}\n\nPOST https://api.bloomtext.com/v1/patient-messages\n\n{"to":{"patient_id":"{familyPatientId}"},"body":"Today’s visit wrapped up at 4:05 PM."}'},{title:"Departed-caregiver cleanup",summary:"When WellSky reports a caregiver deactivated, give the scheduler a list of their clients who need coverage.",steps:["Subscribe to practitioner.deactivated.changed the same way as the clock-out example.","Read the caregiver’s upcoming shifts in WellSky to find the affected clients.","Post the count to the scheduling conversation with an org admin’s OAuth token, so staff can reassign coverage and update each conversation."],code:'POST https://api.bloomtext.com/v1/me/conversations/{schedulingConversationId}/messages\n\n{"body":"A caregiver was deactivated in WellSky. 3 clients need coverage starting Monday. Reply here for the list."}'}],aiAgent:{intro:"For a home care or hospice office, an agent with WellSky data and BloomText can answer “who is covering Mrs. Lee tomorrow?”, find shifts with no caregiver reply, and keep field staff in the right conversations.",vendorTools:"You give the agent WellSky data through a small tool you write, for example one that calls the Personal Care Connect API’s shift search with your agency’s client credentials, or a read-only WellSky FHIR app that your EHR vendor admin registered. WellSky promotes its SkySense AI features inside its own products, but it does not document an MCP server or a way to connect outside agents like Claude or ChatGPT.",steps:["The agent calls your WellSky tool to get tomorrow’s shifts for every active caregiver.","It checks each caregiver’s conversation for a reply to today’s reminder, through an org admin’s OAuth connection.","It lists shifts where the caregiver hasn’t confirmed.","It posts that list to the scheduling conversation for a person to act on."],examplePrompt:"Get tomorrow’s shifts from WellSky for all active caregivers. For each caregiver, read their BloomText conversation and check whether they replied to tonight’s shift reminder. Post a list of unconfirmed shifts, with times and client first initials only, to the scheduling conversation."},faqs:[{question:"Does WellSky have an API?",answer:"Yes, and which one you use depends on the WellSky product. WellSky Personal Care has the Connect API, a public REST reference covering shifts, clients, caregivers, documents, and webhook subscriptions. WellSky also publishes read-only SMART on FHIR APIs, including one for WellSky Hospice and Palliative aimed at EHR partners."},{question:"How do I get WellSky API access?",answer:"For the Personal Care Connect API, the agency licenses it under WellSky’s Connect API Agreement and uses its client ID and secret to get tokens; anyone who isn’t the agency’s employee must sign Connect Access Terms first. For the WellSky FHIR API, only the EHR’s vendor admins can add your client app. For Hospice and Palliative, WellSky provides a registration form and the consolo.support@wellsky.
1com contact."},{question:"Does the WellSky Connect API have webhooks?",answer:"Yes. The Personal Care Connect API lets you create Subscription records that post to your rest-hook endpoint. Documented events include patient.created, encounter.clockout.changed, practitioner.deactivated.changed, and changes to client or caregiver names, addresses, and phone numbers."},{question:"Does WellSky have texting for clients and families?",answer:"WellSky Personal Care gives families the Family Room portal with the care calendar and shift notes, and WellSky Hospice and Palliative has a patient portal with Beacon chat. None of the WellSky API references we reviewed has an endpoint for sending text messages. BloomText holds the conversation, and your app decides what to post based on WellSky data."},{question:"Can I connect WellSky to ChatGPT, Claude, or another AI agent?",answer:"Yes, with tools you build. Your agent uses BloomText through the BloomText API, with an organization API key. For WellSky, the agent calls your own tool that uses your licensed Connect API credentials or an approved FHIR app, because WellSky does not document an MCP server for outside agents."},{question:"Is it HIPAA compliant to text caregivers and families from WellSky data?",answer:"It can be when every system that handles the data is covered. BloomText turns on API access only for organizations with a signed BAA. WellSky’s Connect API Agreement also limits who can use the data, so confirm your setup with WellSky. Keep messages to shift times and visit logistics, not care details."}],sources:[n("https://apidocs.clearcareonline.com/","WellSky Personal Care Connect API reference","Client-credentials token, connect.clearcareonline.com base URL, Appointment shift search, Subscription webhook criteria"),n("https://wellsky.com/clearcare-connect-api-terms/","ClearCare Connect API Agreement","Licensed access token, Connect Access Terms for non-employees, fees and third-party limits"),n("https://mediwareinc.github.io/consolo.interop-api-docs/","WellSky Hospice and Palliative API","FHIR R4 read resources including CareTeam, registration form, and support contact"),n("https://info.wellsky.com/rs/596-FKF-634/images/WellSkyHospicePalliative_DisclosureTransparencyStatement.pdf","WellSky Hospice and Palliative disclosure statement","SMART on FHIR USCDI API, patient portal with Beacon chat, and license costs"),n("https://wellsky.com/personal-care-software/","WellSky Personal Care","Family Room, caregiver mobile app, SkySense AI, and Connect API")]}},u=Object.fromEntries(Object.entries({athenahealth:{slug:"integrate/athenahealth",vendorName:"athenahealth",title:"Integrate athenahealth with BloomText | API integration guide",description:"Connect athenahealth to BloomText with the BloomText REST API. Vendor access steps, a documented Patient read, and the BloomText message calls.",heroHeading:"Integrate athenahealth with BloomText",heroSubheading:"Read patients from athenahealth and message them in BloomText conversations from your own software.",quickAnswer:"Yes. Your app reads patients and appointments from athenahealth's API and sends messages with the BloomText API. There's nothing to install: a small app of yours joins the two, and athenahealth reviews each app before it goes live.",dataLabel:"patients and appointments",accessSummary:"athenahealth has free certified FHIR APIs that practices can switch on themselves, and commercial athenaOne APIs that need a contract and an app review.",accessSteps:["Create a developer account in athenahealth's Developer Portal and build against its Preview sandbox.","Choose the certified FHIR APIs, or sign an athenaOne API contract if you need more data.","Pass athenahealth's app review, then have each practice turn your app on."],vendorQuickstart:"Read the patient from athenahealth, find the matching BloomText patient by MRN, then send the message to that patient. Store the athenahealth patient ID as the BloomText patient’s MRN; nothing maps automatically.",vendorRequestExample:"GET https://<approved-athena-fhir-base>/fhir/Patient/<approved-patient-id>?_format=json\nAuthorization: Bearer <approved-access-token>\nAccept: application/fhir+json",vendorRequestSource:n("https://mydata.athenahealth.com/static/apidoc/ig-ge-patient.html","athenahealth Patient resource profile","Documented FHIR Patient read shape and approved base URL"),bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your appointment is confirmed for Tuesday at 10:00 AM."}',source:n("https://docs.athenahealth.com/api/","athenahealth API documentation","API reference and authentication"),accessSource:n("https://docs.athenahealth.com/api/guides/overview","athenahealth API guides","API types, contracting, and app onboarding")},eclinicalworks:{slug:"integrate/eclinicalworks",vendorName:"eClinicalWorks",title:"Integrate eClinicalWorks with BloomText | API integration guide",description:"Connect eClinicalWorks to BloomText with the BloomText REST API. Vendor FHIR access, a documented Patient read, and the BloomText message calls.",heroHeading:"Integrate eClinicalWorks with BloomText",heroSubheading:"Pair the eClinicalWorks FHIR API with the BloomText API to send patient messages from your own software.",quickAnswer:"Yes. eClinicalWorks publishes free FHIR APIs for reading patient data, and the BloomText API sends the messages. Your app matches each eClinicalWorks patient to a BloomText patient by MRN, and scheduling data comes through eClinicalWorks' separate healow portal.",dataLabel:"patients, plus appointments through healow",accessSummary:"eClinicalWorks' Open Developer FHIR documentation is free for certified APIs. Wider production use goes through its partner process, and scheduling APIs live on the healow Developer Portal.",accessSteps:["Register on the eClinicalWorks Open Developer portal and test in its sandbox.","Publish your app and connect it to each customer practice.","For appointments, apply separately through the healow Developer Portal."],vendorQu
1ickstart:"Read the patient from eClinicalWorks, find the matching BloomText patient by MRN, then send the message to that patient. Store the eClinicalWorks patient ID as the BloomText patient’s MRN; nothing maps automatically.",vendorRequestExample:"GET https://staging-fhir.ecwcloud.com/fhir/r4/<approved-practice-id>/Patient/<approved-patient-id>\nAccept: application/json+fhir\nAuthorization: Bearer <approved-oauth2-token>",vendorRequestSource:n("https://fhir.eclinicalworks.com/ecwopendev/documentation/fhirresources/read/Patient.pdf","eClinicalWorks Patient read PDF","Documented Patient read request, Accept header, and OAuth2 bearer placeholder"),bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Reminder: you have an appointment tomorrow at 9:30 AM."}',source:n("https://fhir.eclinicalworks.com/ecwopendev/documentation","eClinicalWorks Open Developer FHIR documentation","Resource operations and certified FHIR access"),accessSource:n("https://connect4.healow.com/apps/jsp/dev/","healow Developer Portal","Scheduling application review and approval")},pointclickcare:{slug:"integrate/pointclickcare",vendorName:"PointClickCare",title:"Integrate PointClickCare with BloomText | API integration guide",description:"Connect PointClickCare to BloomText with the BloomText REST API. Partner access steps, a documented Patient read, and the BloomText message calls.",heroHeading:"Integrate PointClickCare with BloomText",heroSubheading:"Read residents from PointClickCare and coordinate care in BloomText conversations from your own software.",quickAnswer:"Yes, with PointClickCare's approval. PointClickCare's FHIR API lets approved apps read residents, care teams, and encounters, and the BloomText API runs the conversations with residents and families. Production access requires a PointClickCare partnership and a per-facility fee.",dataLabel:"residents, care teams, and encounters",accessSummary:"PointClickCare's FHIR API is documented publicly, but production apps need PointClickCare's approval. Sandbox apps are approved automatically, and production is billed per app, per facility.",accessSteps:["Apply to the PointClickCare Developer Program as a USCDI Connector or Marketplace Partner.","Build against the sandbox, where apps are approved automatically.","Get production approval and enable your app for each facility."],vendorQuickstart:"Read the patient from PointClickCare, find the matching BloomText patient by MRN, then send the message to that patient. Store the PointClickCare patient ID as the BloomText patient’s MRN; nothing maps automatically.",vendorRequestExample:"GET https://connect2.pointclickcare.com/fhir/R4/<approved-tenant-id>/Patient/<approved-patient-id>\nAuthorization: Bearer <approved-access-token>\nAccept: application/fhir+json",vendorRequestSource:n("https://fhir.pointclickcare.com/PointClickCare.html","PointClickCare Patient API specification","Documented tenant and Patient read path; SMART app access remains approved"),bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your care conference moved to 2:00 PM today. Reply here with any questions."}',source:n("https://fhir.pointclickcare.com/","PointClickCare FHIR developer site","USCDI resource reference and app registration"),accessSource:n("https://developer.pointclickcare.com/spa","PointClickCare Developer Program","Apply for partnership and environment access")},kipu:{slug:"integrate/kipu",vendorName:"Kipu",title:"Integrate Kipu with BloomText | API integration guide",description:"Connect Kipu to BloomText with the BloomText REST API. How Kipu API access works and the BloomText calls to read and send messages.",heroHeading:"Integrate Kipu with BloomText",heroSubheading:"Use Kipu appointment and patient data to drive messages in BloomText conversations. Kipu grants its own API access.",quickAnswer:"Yes. Kipu's API gives approved programs access to patients, appointments, and group sessions, and the BloomText API sends the messages. Kipu API access is a paid service your program's Super Admin requests, so start there.",dataLabel:"patients, appointments, and group sessions",accessSummary:"Kipu's API is a paid add-on. Only a Super Admin at the treatment program can request it, and outside vendors sign an agreement with Kipu.",accessSteps:["Have your program's Super Admin request API access in Kipu under Settings, Integrations, API Management.","If you're building for a client, sign Kipu's vendor agreement.","Use the access ID, secret key, and app ID Kipu issues. Activation can take up to 48 hours."],vendorQu
1ickstart:"Build the BloomText side on its own: read a patient’s replies and send them a message. On the Kipu side, map only the appointment and patient objects Kipu approves for your key. Kipu does not receive BloomText messages; the conversation lives in BloomText.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your appointment is confirmed for Tuesday at 10:00 AM."}',source:n("https://www.kipuhealth.com/partners-and-integrations/api/","Kipu API overview","API key, paid access, and object list"),accessSource:n("https://kipuhealth.zendesk.com/hc/en-us/articles/19113157849755-Kipu-API-FAQ","Kipu API FAQ","Super Admin request path")},rethinkbh:{slug:"integrate/rethinkbh",vendorName:"RethinkBH",title:"Integrate RethinkBH with BloomText | API integration guide",description:"Connect RethinkBH to BloomText with the BloomText REST API. How Rethink API access works and the BloomText calls to read and send messages.",heroHeading:"Integrate RethinkBH with BloomText",heroSubheading:"Use RethinkBH appointment and client data to drive messages in BloomText conversations. Rethink grants its own API access.",quickAnswer:"Yes, through your Rethink account. Rethink's API gives approved customers appointments, clients, and staff assignments, and the BloomText API handles messaging with parents and care teams. Access is set up through your Rethink Customer Success Manager.",dataLabel:"appointments, clients, and staff assignments",accessSummary:"Rethink offers a real-time Live API and a nightly Data Warehouse. Both are paid and are requested through your Customer Success Manager rather than a self-serve portal.",accessSteps:["Ask your Rethink Customer Success Manager for Live API access.","Confirm which resources your account can read, such as appointments, clients, and staff.","Use the credentials and documentation Rethink provides."],vendorQuickstart:"Match the Rethink clients your account is approved for to BloomText patients by MRN, then read and send messages with the calls below. Rethink shares its request details through the customer access path.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Today’s session starts at 3:30 PM instead of 3:00 PM."}',source:n("https://rethinkautism.atlassian.net/wiki/spaces/RBS/pages/3167289366/Rethink+APIs","RethinkBH API documentation","Customer Success access and API categories"),accessSource:n("https://www.rethinkbehavioralhealth.com/our-solutions/marketplace/","RethinkBH marketplace","Partner and marketplace context")},centralreach:{slug:"integrate/centralreach",vendorName:"CentralReach",title:"Integrate CentralReach with BloomText | API integration guide",description:"Connect CentralReach to BloomText with the BloomText REST API. How CentralReach API credentials work and the BloomText calls to read and send messages.",heroHeading:"Integrate CentralReach with BloomText",heroSubheading:"CentralReach stays your clinical system. The BloomText API sends and reads the messages around it.",quickAnswer:"Yes. CentralReach's API lets customers with an API subscription read their own data, and the BloomText API sends and reads the messages around it. You'll need three credentials from your CentralReach representative to start.",dataLabel:"staff, clients, and the scheduling data your API user can access",accessSummary:"CentralReach's API is available to customers with an active API subscription. Your representative issues a client ID, a client secret, and an API key.",accessSteps:["Request API access on CentralReach's API page.","Get your client ID, client secret, and CR API key from your representative.","Exchange them for a one-hour token and call the endpoints your API user is allowed to use."],vendorQuickstart:"Authenticate to CentralReach with its documented OAuth client-credentials flow and read the resources you are approved for. Then use your BloomText API key to message the matching patient and read their replies. The two systems use separate credentials.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"The Thursday schedule has been updated. Check your calendar."}',source:n("https://centralreach.com/resources/api/","CentralReach API resources","API overview and access request"),accessSource:n("https://centralreach.com/resources/api/requests/","CentralReach API request process","Representative-provisioned credentials")}
1,simplepractice:{slug:"integrate/simplepractice",vendorName:"SimplePractice",title:"Integrate SimplePractice with BloomText | API integration guide",description:"Connect SimplePractice to BloomText with the BloomText REST API. How SimpleConnect access works and the BloomText calls to read and send messages.",heroHeading:"Integrate SimplePractice with BloomText",heroSubheading:"SimplePractice and BloomText work side by side today. The BloomText API connects them when your workflow needs it.",quickAnswer:"SimplePractice doesn't offer a public API, but it works well alongside BloomText. Most practices run the two side by side, and health plans or EAPs in SimplePractice's SimpleConnect program can pair its scheduling API with the BloomText API.",dataLabel:"scheduling and referral data, for SimpleConnect partners",readStep:"SimpleConnect partners read scheduling and referral data from SimplePractice. Everyone else exports client contacts once to build the mapping.",accessSummary:"SimplePractice says it doesn't offer a public-facing API. Its SimpleConnect scheduling API is for health plans, EAPs, and health systems.",accessSteps:["If you're a health plan, EAP, or health system, contact SimpleConnect about scheduling access.","Otherwise, run SimplePractice and BloomText side by side, and use the BloomText API for your own automation.","Export your client contacts from SimplePractice and import them as BloomText patients."],vendorQuickstart:"Match the SimpleConnect scheduling and referral data you are approved for to BloomText patients, then read and send messages with the calls below. SimplePractice shares its request shapes once your access is confirmed.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"We received your referral. Reply here to schedule an intake call."}',source:n("https://www.simplepractice.com/simpleconnect/","SimplePractice SimpleConnect","Enterprise access and scheduling/referral scope"),accessSource:n("https://www.simplepractice.com/enterprise/","SimplePractice enterprise contact","Gated access path")},wellsky:{slug:"integrate/wellsky",vendorName:"WellSky",title:"Integrate WellSky with BloomText | API integration guide",description:"Connect WellSky to BloomText with the BloomText REST API. WellSky FHIR and partner access paths and the BloomText calls to read and send messages.",heroHeading:"Integrate WellSky with BloomText",heroSubheading:"Read patient data from WellSky and coordinate care in BloomText conversations from your own software.",quickAnswer:"Yes. WellSky's personal care and hospice products offer APIs for shifts, clients, and care teams, and the BloomText API messages clients and families in BloomText conversations. Each WellSky product has its own access process.",dataLabel:"shifts, clients, and care teams",accessSummary:"WellSky's APIs differ by product. Personal Care has the Connect API, with shift data and webhooks behind a license key. Hospice and other products offer read-only FHIR APIs that an admin registers.",accessSteps:["Confirm which WellSky product your agency uses.","For Personal Care, get a Connect API license key and accept WellSky's access terms.","For FHIR products, have your WellSky admin register your app."],vendorQuickstart:"Read Patient or DocumentReference data through the approved WellSky FHIR app, then message the matching BloomText patient and read their replies. Treat the FHIR and Connect products as separate integrations.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Visit schedule updated for next week. Reply with any questions."}',source:n("https://wellsky.dynamicfhir.com/wellsky/basepractice/r4/Home/ApiDocumentation","WellSky FHIR API documentation","Vendor-admin access and read-only resource scope"),accessSource:n("https://wellsky.com/about-us/partners/","WellSky partners","Partner-oriented access context")},dentrix:{slug:"integrate/dentrix",vendorName:"Dentrix",title:"Integrate Dentrix with BloomText | API integration guide",description:"Connect Dentrix to BloomText with the BloomText REST API. How API Exchange access works and the BloomText calls to read and send messages.",heroHeading:"Integrate Dentrix with BloomText",heroSubheading:"Dentrix stays your practice system. The BloomText API sends and reads the patient messages around it.",quickAnswer:"Yes, through Henry Schein One's API program. Ap
1proved apps can read Dentrix appointments, patients, and more, and the BloomText API sends the reminders and messages. Access takes an application, a security review, and program fees.",dataLabel:"appointments, patients, and recall data",accessSummary:"Dentrix data is available through Henry Schein One's API Exchange. You apply, complete a security assessment, and sign the Dentrix API Agreement before you receive a key.",accessSteps:["Apply through the Henry Schein One API Exchange.","Complete the security assessment and setup testing.","Sign the Dentrix API Agreement and receive your key."],vendorQuickstart:"Use the request shapes Henry Schein One approves through API Exchange on the Dentrix side. On the BloomText side, message the matching patient and read their replies with the calls below.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your cleaning is confirmed for Friday at 8:00 AM."}',source:n("https://www.henryscheinone.com/dental-solutions/api-exchange/","Henry Schein One API Exchange","Partner application, security review, and activation"),accessSource:n("https://www.henryscheinone.com/dental-solutions/api-exchange/vendors-list/","API Exchange authorized vendors","Approved-vendor directory")},webpt:{slug:"integrate/webpt",vendorName:"WebPT",title:"Integrate WebPT with BloomText | API integration guide",description:"Connect WebPT to BloomText with the BloomText REST API. How to request WebPT partner access and the BloomText calls to read and send messages.",heroHeading:"Integrate WebPT with BloomText",heroSubheading:"WebPT stays your clinical and scheduling system. The BloomText API sends and reads the patient messages around it.",quickAnswer:"WebPT doesn't offer a public API, but it connects to other systems through HL7 interfaces it sets up with you. Pair those feeds with the BloomText API to message patients and staff, or simply run WebPT and BloomText side by side.",dataLabel:"HL7 registration and documentation feeds",readStep:"Your app receives the HL7 registration and documentation feeds WebPT sets up for your account.",accessSummary:"WebPT integrates through HL7 interfaces, such as registration, billing, and documentation feeds, that WebPT configures and monitors. There's no self-serve developer signup.",accessSteps:["Contact WebPT about an HL7 interface for your account.","Agree on the feeds you need, such as new-patient registration.","Receive the feed in your app and message patients with the BloomText API."],vendorQuickstart:"Build the BloomText side first with the read and post calls below, then connect the HL7 feed WebPT sets up for your account.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your therapy session moved to Wednesday at 4:00 PM."}',source:n("https://www.webpt.com/partners","WebPT partners","Curated partner/contact surface; no public developer reference"),accessSource:n("https://www.webpt.com/contact","WebPT contact","Partner access request")},generic:{slug:"integrate",vendorName:"your EMR",title:"Integrate your EMR with BloomText | API integration guide",description:"Connect your EMR to BloomText with the BloomText REST API. Message patients, sync patient records, and run campaigns with an organization API key.",heroHeading:"Integrate your EMR with BloomText",heroSubheading:"Message patients and read their replies from your EMR integration. Every request is authenticated with your organization’s BloomText API key.",quickAnswer:"Yes. Any EMR with an API can connect to BloomText: your app reads schedules or patients from the EMR and sends messages with the BloomText API. BloomText handles the messaging, and your EMR stays the system of record.",dataLabel:"patients and appointments",accessSummary:"Every EMR vendor controls its own API access. Some offer free certified APIs, and others require a partnership, a paid add-on, or an admin request.",accessSteps:["Check your EMR's developer documentation, or ask your vendor rep about API access.","Register your app with BloomText.","Connect the two in a small service you run."],vendorQu
1ickstart:"Start from the vendor’s own documentation or partner terms. On the BloomText side, read the API reference for API keys, patients, and sending messages. Then match vendor records to BloomText patients by MRN.",bloomtextExample:'GET https://api.bloomtext.com/v1/patient-messages?patient_id={patientId}&q=from:patient&page[limit]=50\nPOST https://api.bloomtext.com/v1/patient-messages\n{"to":{"patient_id":"{patientId}"},"body":"Your appointment is confirmed for Tuesday at 10:00 AM."}',source:n("https://www.bloomtext.com/developers/api/","BloomText API reference")}}).map(e=>{let[t,a]=e;return[t,{...a,...m[t]}]}))},69458:(e,t,a)=>{"use strict";a.d(t,{A:()=>j});var n=a(37876);a(14232);var o=a(3577),s=a(6913),i=a(16185),r=a(30437),c=a(5838),l=a(77775),d=a(33523);let h="Authorization: Bearer <api-key>",p="GET https://api.bloomtext.com/v1/organization\n".concat(h),m=/^\S+ https:\/\/api\.bloomtext\.com\/v1\/(?:me(?:[/?]|$)|users(?:[/?]|$))/,u=e=>m.test(e),g=e=>{let t=u(e)?"Authorization: Bearer <org-admin-oauth-token>":h;return e.replace(/^((?:GET|DELETE) https:\/\/api\.bloomtext\.com.*)$/m,"$1\n".concat(t,"\n")).replace(/^(POST https:\/\/api\.bloomtext\.com.*)$/m,"$1\n".concat(t,"\nIdempotency-Key: <unique-request-key>\nContent-Type: application/json\n")).replace(/^(PATCH https:\/\/api\.bloomtext\.com.*)$/m,"$1\n".concat(t,"\nContent-Type: application/json\n")).replace(/\n{3,}/g,"\n\n").trim()},f=e=>e.split(/\n(?=(?:GET|POST|PUT|PATCH|DELETE) )/).map(e=>e.trim()).filter(Boolean),y=e=>{let{code:t,vendorName:a}=e;return f(t).map(e=>/^\S+ https:\/\/api\.bloomtext\.com\//.test(e)?(0,n.jsx)(d.A,{code:g(e),label:"BloomText \xb7 HTTP"},e):(0,n.jsx)(d.A,{code:e,label:"".concat(a," \xb7 HTTP")},e))},v=e=>{let{text:t}=e;return t.split(/(`[^`]+`)/).map((e,t)=>e.startsWith("`")&&e.endsWith("`")?(0,n.jsx)("code",{children:e.slice(1,-1)},t):e)},w=e=>{let{data:t}=e;return(0,n.jsx)("section",{className:"landing-pain-points",id:"what-you-can-build",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsxs)("h2",{className:"landing-pain-points--heading",children:["What you can build with ",(e=>e.apiName||"the ".concat(e.vendorName," API"))(t)]}),t.buildIdeasIntro&&(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:t.buildIdeasIntro})}),(0,n.jsx)("div",{className:"landing-api--ideas",children:t.buildIdeas.map(e=>(0,n.jsxs)("article",{className:"landing-api--idea",children:[(0,n.jsx)("h3",{children:e.title}),(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:e.description})}),e.vendorData&&(0,n.jsxs)("p",{className:"landing-api--idea-uses",children:["Uses ",e.vendorData]})]},e.title))})]})})},P=e=>{let{data:t}=e;return(0,n.jsx)("section",{className:"landing-features",id:"example-projects",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsxs)("h2",{className:"landing-features--heading",children:["Example ",t.projectsName||("integrate"===t.slug?"EMR API":"".concat(t.vendorName," API"))," projects"]}),t.exampleProjects.some(e=>f(e.code||"").some(u))&&(0,n.jsx)("p",{children:"Patient requests use your organization’s BloomText API key. Posts to a staff team conversation use an org admin’s OAuth token instead, and only reach conversations that admin is part of."}),t.exampleProjects.map(e=>(0,n.jsxs)("article",{className:"landing-api--project",children:[(0,n.jsx)("h3",{children:e.title}),(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:e.summary})}),e.steps&&(0,n.jsx)("ol",{children:e.steps.map(e=>(0,n.jsx)("li",{children:(0,n.jsx)(v,{text:e})},e))}),e.code&&(0,n.jsx)(y,{code:e.code,vendorName:t.vendorName})]},e.title))]})})},x=e=>{let{data:t}=e;return(0,n.jsx)("section",{className:"landing-pain-points",id:"ai-agent",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-pain-points--heading",children:"integrate"===t.slug?"Connect your EMR and BloomText to your AI agent":"Connect ".concat(t.vendorName," and BloomText to your AI agent")}),(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:t.aiAgent.intro})}),(0,n.jsx)("h3",{children:"1. Give the agent a BloomText API key"}),(0,n.jsx)("p",{children:"An org admin creates an API key in BloomText. Your agent’s tools use it to message patients and read their replies, always naming the patient by ID, phone number, or MRN. The key can’t reach staff conversations; for those, the agent uses an org admin’s OAuth token, which reaches only the conversations that admin is part of."}),(0,n.jsx)(d.A,{code:p,label:"BloomText \xb7 Check the key"}),(0,n.jsxs)("h3",{children:["2. Give the agent ","integrate"===t.slug?"your EMR":t.vendorName," data"]}),(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:t.aiAgent.vendorTools})}),(0,n.jsx)("h3",{children:"3. Tell it what to do"}),(0,n.jsx)("ol",{children:t.aiAgent.steps.map(e=>(0,n.jsx)("li",{children:(0,n.jsx)(v,{text:e})},e))}),t.aiAgent.examplePrompt&&(0,n.jsx)(d.A,{code:t.aiAgent.examplePrompt,label:"Example prompt",wrap:!0}),(0,n.jsxs)("p",{children:["Messages the agent sends with the key show the key’s name to staff, and patients see your clinic. An org admin can delete the key at any time. ",(0,n.jsx)("a",{href:"/developers/api/ai-agents/",children:"Read the AI agent docs"}),"."]})]})})},k=e=>{let{data:t}=e;return(0,n.jsx)("section",{className:"landing-features",id:"faq",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-features--heading",children:"integrate"===t.slug?"EMR API integration FAQ":"".concat(t.vendorName," API FAQ")}),t.faqs.map(e=>(0,n.jsxs)("article",{className:"landing-api--faq",children:[(0,n.jsx)("h3",{children:e.question}),(0,n.jsx)("p",{children:(0,n.jsx)(v,{text:e.answer})})]},e.question))]})})},A=e=>{var t,a,o;let{data:s}=e;return(0,n.jsxs)(n.Fragment,{children:[(null==(t=s.buildIdeas)?void 0:t.length)>0&&(0,n.jsx)(w,{data:s}),(null==(a=s.exampleProjects)?void 0:a.length)>0&&(0,n.jsx)(P,{data:s}),s.aiAgent&&(0,n.jsx)(x,{data:s}),(null==(o=s.faqs)?void 0:o.length)>0&&(0,n.jsx)(k,{data:s})]})};A.displayName="ApiIntegrationSections";var b=a(17667),I=a(66621),T=a(65346),C=a(80411);let R="https://www.bloomtext.com",S=Object.entries(I.D).filter(e=>{let[t]=e;return"generic"!==t}).map(e=>{let[,t]=e;return t}),B={GET:"Read a patient’s replies",POST:"Send a message"},D=e=>{var t,a,h;let p,{data:m}=e,u="".concat(R,"/").concat(m.slug,"/"),y="integrate"===m.slug,v=y?"your EMR":m.vendorName,w=null!=(h=null==(t=C.V[m.slug.replace("integrate/","")])?void 0:t.slugs)?h:[],P=[...w.length?[{heading:"BloomText for ".concat(m.vend
1orName," teams"),links:w.map(e=>({label:T.O[e].heroHeading,href:"/".concat(e,"/")}))}]:[],{heading:"Developer docs",links:[{label:"BloomText Patient API quickstart",href:"/developers/api/patient-api-quickstart/"},{label:"Build an AI agent",href:"/developers/api/ai-agents/"},{label:"All EMR integration guides",href:"/integrate/"}].filter(e=>!(y&&"/integrate/"===e.href))}],x=[{name:"BloomText",url:"".concat(R,"/")},{name:"Integrations",url:"".concat(R,"/integrate/")},{name:m.vendorName,url:u}];return(0,n.jsxs)("div",{className:"blmh-base landing-explainer landing-api",children:[(0,n.jsxs)(o.A,{title:m.title,description:m.description,children:[(0,n.jsx)(s.Ay,{data:(0,s.rL)()}),(0,n.jsx)(s.Ay,{data:(0,s.Zt)(x)}),(0,n.jsx)(s.Ay,{data:(0,s.uF)({headline:m.heroHeading,description:m.description,url:u,author:"BloomText",authorUrl:"".concat(R,"/about/"),datePublished:"2026-09-21",dateModified:m.source.lastVerified})}),(null==(a=m.faqs)?void 0:a.length)>0&&(0,n.jsx)(s.Ay,{data:(0,s.yQ)(m.faqs.map(e=>{let{question:t,answer:a}=e;return{question:t,answer:a.replace(/`/g,"")}}))})]}),(0,n.jsx)(i.A,{}),(0,n.jsx)(c.A,{heading:m.heroHeading,subheading:m.heroSubheading}),(0,n.jsxs)("div",{className:"landing-api--quick",children:[(0,n.jsxs)("h2",{className:"landing-api--quick-question",children:["Can you connect ",v," to BloomText?"]}),(0,n.jsx)("p",{className:"landing-quick-answer",children:m.quickAnswer})]}),(0,n.jsx)("section",{className:"landing-pain-points",id:"how-it-works",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-pain-points--heading",children:"How it works"}),(0,n.jsxs)("ol",{className:"landing-api--steps",children:[(0,n.jsxs)("li",{children:[(0,n.jsxs)("h3",{children:["Read from ",v]}),(0,n.jsx)("p",{children:m.readStep||"Your app reads ".concat(m.dataLabel," through ").concat(y?"your EMR’s":"".concat(m.vendorName,"’s")," API.")})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("h3",{children:"Match to a conversation"}),(0,n.jsx)("p",{children:"It looks up each patient’s BloomText conversation in a simple mapping your app keeps."})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("h3",{children:"Message in BloomText"}),(0,n.jsxs)("p",{children:["It sends reminders and replies with the ",(0,n.jsx)("a",{href:"/developers/api/",children:"BloomText API"}),", and reads new patient replies by time range."]})]})]}),(0,n.jsxs)("p",{className:"landing-api--note",children:["your EMR"===v?"Your EMR":m.vendorName," stays your system of record. BloomText handles the conversations, and nothing syncs until your app connects the two."]})]})}),y&&(0,n.jsx)("section",{className:"landing-features",id:"guides-by-emr",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-features--heading",children:"Guides by EMR"}),(0,n.jsx)("div",{className:"landing-api--vendors",children:S.map(e=>(0,n.jsxs)("a",{className:"landing-api--vendor",href:"/".concat(e.slug,"/"),children:[(0,n.jsx)("strong",{children:e.vendorName}),(0,n.jsx)("span",{children:e.dataLabel})]},e.slug))})]})}),(0,n.jsx)("section",{className:y?"landing-pain-points":"landing-features",id:"example-requests",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:y?"landing-pain-points--heading":"landing-features--heading",children:"Example requests"}),(0,n.jsx)("p",{children:m.vendorQuickstart}),m.vendorRequestExample&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("h3",{children:["Read from ",m.vendorName]}),(0,n.jsx)(d.A,{code:m.vendorRequestExample,label:"".concat(m.vendorName," \xb7 HTTP")}),(0,n.jsx)("p",{children:"Use the base URL, access token, and IDs from your approved vendor environment."}),m.vendorRequestSource&&(0,n.jsxs)("p",{children:["See ",(0,n.jsx)("a",{href:m.vendorRequestSource.url,target:"_blank",rel:"noopener noreferrer",children:m.vendorRequestSource.label})," for the full request."]})]}),m.bloomtextExample&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("h3",{children:m.vendorRequestExample?"Message them in BloomText":"Read and send messages in BloomText"}),f(m.bloomtextExample).map(e=>(0,n.jsx)(d.A,{code:g(e),label:"BloomText \xb7 ".concat(B[e.split(" ")[0]]||"HTTP")},e)),(0,n.jsxs)("p",{children:["Send your organization’s BloomText API key in the ",(0,n.jsx)("a",{href:"/developers/api/api-keys/",children:"Authorization"})," header on every request. POST requests also need ",(0,n.jsx)("code",{children:"Idempotency-Key"})," and ",(0,n.jsx)("code",{children:"Content-Type"})," headers."]})]}),(0,n.jsx)("p",{children:(0,n.jsx)("a",{href:"/developers/api/",children:"Read the API docs"})})]})}),(0,n.jsx)(A,{data:m}),(0,n.jsx)("section",{className:"landing-pain-points",id:"access",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-pain-points--heading",children:y?"Getting E
1MR API access":"Getting ".concat(m.vendorName," API access")}),(0,n.jsx)("p",{children:m.accessSummary}),(0,n.jsx)("ol",{className:"landing-api--access-steps",children:m.accessSteps.map(e=>(0,n.jsx)("li",{children:e},e))})]})}),(0,n.jsx)("section",{className:"landing-features",children:(0,n.jsxs)("div",{className:"landing-pain-points--inner",children:[(0,n.jsx)("h2",{className:"landing-features--heading",children:"Get a BloomText API key"}),(0,n.jsx)("p",{children:"API access is available to organizations with a signed BAA. Book a short call, tell us what you’re building, and we’ll turn on API access so an org admin can create your key. Don’t include PHI when you book."}),(0,n.jsx)("p",{children:(0,n.jsx)(l.A,{className:"blmh-button purple landing-api--cta",children:"Request API access"})})]})}),(0,n.jsx)(b.A,{groups:P}),(0,n.jsxs)("section",{className:"landing-compliance--sources landing-pain-points--inner",children:[(0,n.jsx)("h2",{children:"integrate"===m.slug?"Developer resources":"".concat(m.vendorName," developer resources")}),(0,n.jsx)("ul",{children:[m.source,m.accessSource,...m.sources||[]].filter(Boolean).map(e=>(0,n.jsxs)("li",{children:[(0,n.jsx)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",children:e.label}),e.section&&(0,n.jsx)("span",{className:"landing-api--link-note",children:e.section})]},e.url))}),(0,n.jsxs)("p",{className:"landing-compliance--last-verified",children:["Links last checked ",(p=m.source.lastVerified,new Date("".concat(p,"T00:00:00Z")).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric",timeZone:"UTC"})),"."]})]}),(0,n.jsx)(r.A,{})]})};D.displayName="ApiIntegrationPage";let j=D}
1,77775:(e,t,a)=>{"use strict";a.d(t,{A:()=>i});var n=a(37876);a(14232);var o=a(69742);let s=e=>{let{children:t="Request API access",...a}=e;return(0,n.jsx)(o.K,{...a,cta:"api-access",utmParams:{utm_campaign:"api-access"},children:t})};s.displayName="ApiAccessCta";let i=s}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.