Skip to content

Plenura (plenura.redbroomsoftware.com)

Wellness and therapy platform — therapist discovery, session booking, AI-assisted client matching and session notes, practice management, and earnings withdrawal.

URL: https://plenura.redbroomsoftware.comStatus: LIVE Tier: T2 (vertical SaaS primitive)

T1 apps are indispensable horizontal primitives. T2 apps are vertical SaaS or single-domain primitives — primitive-like in their domain but not universal dependencies.

What you can integrate

  • Appointment lifecycle — receive appointment.completed when a therapy session is marked fulfilled; use for billing, CRM enrichment, or loyalty flows
  • Cancellation eventsbooking.cancelled fires when a client or therapist cancels a scheduled appointment
  • AI therapist matching/api/ai/match returns a ranked list of therapists for a client profile using semantic search
  • Practice management — create practices, invite therapists, and manage team access programmatically
  • Subscription lifecycle — Plenura gates features by Camino subscription tier; the full event set is consumed for graceful upgrades, downgrades, and expirations

Authentication

http
Authorization: Bearer <api_key>
Content-Type: application/json

User identity flows through Camino SSO. Per-practice API keys are issued from the Plenura admin console. Consumer-facing booking uses session tokens scoped to the client profile.

Endpoints

MethodPath
POST/api/ai/chat
POST/api/ai/match
POST/api/ai/review-summary
POST/api/ai/search
POST/api/ai/session-notes
POST/api/ai/support-chat
POST/api/ecosystem/register
POST/api/ecosystem/upsell-track
GET, POST/api/ecosystem/webhooks
GET/api/insights/:therapistId

32 total — 8 admin/cron/internal (hidden) — +14 more primary endpoints not shown. Source: src/routes/api/**/+server.{ts,js} in the plenura-web repo.

Events emitted

EventReceiversDescription
ai.usagecolectivaAI token usage report for metering
appointment.completedcolectiva, caminoA therapy or veterinary appointment has been completed and paid
booking.cancelledcolectivaA booking has been cancelled. PD-115 (S178-inverse fingerprint): goodbay added as sender — Colectiva's handleBookingCancelled handler at /api/ecosystem/webhooks/+server.js:960 was wired end-to-end but no goodbay producer fired the event, surfacing as a dormant emitter in the S327 audit. Goodbay emits from /api/bookings/[id]/+server.ts after the cancel batch commits.
booking.createdcolectivaA new booking was created in a hospitality or pet-care app — Colectiva records it for revenue tracking and occupancy analytics.
upsell.appointment_capacitycaminoPlenura free-tier therapist has hit or is approaching their monthly booking limit (5/month). Camino surfaces a Plenura Pro upgrade recommendation.

Events consumed

EventSendersDescription
cfdi.cancelledconstanzaA CFDI invoice has been cancelled
cfdi.stampedconstanzaA CFDI invoice has been stamped by the SAT via Constanza — receiver apps attach the UUID to their local invoice record and update status.
employee.missing_dataconstanzaConstanza detected an employee with missing fiscal data (RFC/CURP/etc.) — routed back to the source app that created the employee so the missing fields can be completed.
invoice.compliance_issueconstanzaConstanza detected an invoice compliance issue (missing/invalid RFC, duplicate, format error) — routed back to the source app for review.
payment.status_changedcolectiva[auto-derived] payment.status_changed event
subscription.activatedcamino, colectivaA subscription plan has been activated for a tenant — all apps that gate features behind the subscription tier update their local tier state.
subscription.cancelledcamino, colectivaA subscription has been cancelled — all apps that gate features behind the subscription tier update their local tier state to free/cancelled.
subscription.changedcaminoA subscription plan has been upgraded or downgraded — receiver apps update their tier gates and feature access accordingly.
subscription.expiredcaminoA subscription has expired (end of billing period, no renewal)
subscription.past_duecaminoA tenant's subscription entered past_due state after a failed renewal — Camino dunning flow pauses feature access without cancelling. Receiver apps mark memberships or subscriptions past_due until payment is received.
subscription.payment_failedcamino, colectivaA subscription payment attempt failed — receiver apps surface a payment-failed banner to the tenant operator and may restrict feature access.
subscription.pending_cancellationcaminoA subscription cancellation was scheduled for the end of the current billing period — receiver apps surface a notice that the subscription will end soon.
subscription.renewedcamino, colectivaA subscription was successfully renewed for a new billing period — receiver apps update the subscription period end date and resume any paused features.
subscription.trial_expiringcaminoA trial subscription is expiring soon — receiver apps surface an upgrade prompt to the tenant operator.
subscription.trial_startedcaminoA trial subscription was started — receiver apps activate trial-tier features for the new tenant.

Webhook signature

Standard ecosystem HMAC-SHA256 over the raw body with a 5-minute timestamp window. See Webhooks.

OpenAPI

Coming in the OpenAPI generator phase — see /reference/openapi.

SDK

See /sdk/ for @r-bsoftware/ecosystem-sdk helpers.

Gotchas

  • Practice isolation uses plenura_therapist_{id} as the tenant pattern — the tenant key is keyed to the lead therapist, not the practice entity. Queries are always scoped through this key.
  • appointment.completed and booking.cancelled both feed into Colectiva for earnings metering. Ensure your adapter handles both events if you are building a billing summary.
  • AI endpoints (/api/ai/*) emit ai.usage events that feed into Colectiva for per-token billing. Do not call these in loops without rate-limiting on your side.

Red Broom Software Ecosystem