Garita (garita.redbroomsoftware.com)
Access control and amenity reservation platform for multi-unit residential buildings, gyms, spas, clubs, and coworkings — tracking who enters, who visits, and who books shared resources.
URL: https://garita.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
- Access events — receive
garita.access.granted/garita.access.deniedwhen a resident or guest attempts entry - Visitor lifecycle — know when a visitor checks in via
garita.visitor.checked_in; approve or reject visitor requests via API - Amenity reservations — subscribe to
garita.reservation.*events for pool, gym, co-work, or meeting room bookings - Resident onboarding — receive
garita.resident.onboardedto trigger downstream CRM or billing flows in Camino - Property type changes —
garita.property.type_changedlets Camino re-classify the account for pricing and upsell
Authentication
Authorization: Bearer <api_key>
Content-Type: application/jsonUser identity flows through Camino SSO via /auth/rbs/callback. Server-to-server partners use per-property API keys. Resident portal auth uses RBSAuth from the ecosystem SDK.
Endpoints
| Method | Path |
|---|---|
| GET, POST, PATCH | /api/access |
| POST | /api/access/seal-batch |
| POST | /api/access/validate |
| GET | /api/availability |
| GET, PATCH | /api/business-profile |
| GET, POST | /api/cashback |
| POST | /api/cashback/redeem |
| GET, POST, PATCH | /api/cashback/rules |
| GET, POST, PATCH, DELETE | /api/credentials |
| GET, POST | /api/dashboard/channels |
33 total — 2 admin/cron/internal (hidden) — +21 more primary endpoints not shown. Source: src/routes/api/**/+server.{ts,js} in the garita repo.
Events emitted
| Event | Receivers | Description |
|---|---|---|
garita.access.denied | colectiva | A person was denied access to a property |
garita.access.granted | colectiva | A person was granted access to a property (check-in) |
garita.cfdi.stamp.requested | constanza | A Garita boutique-hotel stay requires a CFDI — Constanza queues the stamp request in garita_cfdi_requests. Actual stamping completes when a Constanza org is linked to the Garita property (post-firma operations). Introduced S203 Park Nilo Wave 4. |
garita.credential.issued | (none declared) | An access credential (PIN, QR, RFID, app token, biometric, license plate) was issued in Garita — design-intent receiver reservation; currently fire-and-forget (no active subscribers). |
garita.credential.revoked | (none declared) | An access credential was revoked in Garita — design-intent receiver reservation; currently fire-and-forget (no active subscribers). |
garita.property.type_changed | camino | [auto-derived] garita.property.type_changed event |
garita.reservation.cancelled | colectiva | A reservation was cancelled |
garita.reservation.completed | colectiva | A reservation was completed (amenity used) |
garita.reservation.created | colectiva | A reservation for an amenity was created |
garita.reservation.no_show | colectiva | A resident did not show up for their reservation |
garita.resident.onboarded | colectiva | A new resident or member was registered in a property |
garita.stay.checked_in | (none declared) | A guest checked in to a Garita boutique-hotel stay — fire-and-forget, currently no subscribers. Carries reservation + property context for CRM/activity sync. |
garita.visitor.checked_in | colectiva | A visitor checked into a property |
Events consumed
| Event | Senders | Description |
|---|---|---|
cfdi.stamped | constanza | A CFDI invoice has been stamped by the SAT via Constanza — receiver apps attach the UUID to their local invoice record and update status. |
contact.created | (none declared) | A new CRM contact was created in Camino — Garita links the contact to a resident record on the property. |
contact.updated | (none declared) | A CRM contact record was updated in Camino — receiver apps sync the changed fields to their local contact/investor/resident records. |
customer.created | camino, caracol, comal, servilleta | A new customer/contact/third-party record was created — used for CRM sync, fiscal pre-registration, and cross-app contact linking. |
customer.updated | camino, constanza, caracol | A customer/contact record was updated in Camino — receiver apps sync the changed fields to their local customer records for display and invoicing accuracy. |
payment.received | colectiva, constanza | A payment has been processed via Colectiva |
subscription.activated | camino, colectiva | A subscription plan has been activated for a tenant — all apps that gate features behind the subscription tier update their local tier state. |
subscription.cancelled | camino, colectiva | A subscription has been cancelled — all apps that gate features behind the subscription tier update their local tier state to free/cancelled. |
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
- All events are prefixed
garita.*— they do not follow the flatnoun.verbconvention used by most other ecosystem apps. Filter by prefix when routing. garita.property.type_changedis consumed by Camino to re-classify the account. If you are building a partner integration that gates features by vertical, subscribe to this event to stay synchronized.- The
/api/accessendpoint is designed as an inbound webhook for physical gate controllers, not for user-facing flows. Rate limiting is applied at the device level.