Madriguera (madriguera.redbroomsoftware.com)
Dog hotel and walking management platform — pet and owner onboarding, room reservations, GPS-tracked walks, report cards, and a client-facing booking portal.
URL: https://madriguera.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
- Reservation events — receive
reservation.createdandreservation.checked_outfor hotel stays, to trigger Colectiva billing and Constanza invoicing - Walk completion —
walk.completedfires when a GPS-tracked walk ends; consume for activity logging in Camino - Owner and pet registration —
owner.registeredandpet.registeredenable CRM enrichment in Camino when new clients onboard - Report cards —
report_card.generatedfires after a stay or walk is completed with behavioral notes - Client portal — portal endpoints expose availability and booking without requiring operator credentials
Authentication
Authorization: Bearer <api_key>
Content-Type: application/jsonOperator console uses Camino SSO. Client portal uses session tokens tied to the owner profile. Server-to-server integrations use per-clinic API keys.
Endpoints
| Method | Path |
|---|---|
| GET, POST | /api/add-ons |
| GET | /api/dashboard/stats |
| GET | /api/ecosystem/customer-insights |
| GET | /api/ecosystem/feature-access |
| POST | /api/ecosystem/register |
| GET | /api/ecosystem/upsell-recommendations |
| POST | /api/ecosystem/upsell-track |
| GET, POST | /api/ecosystem/webhooks |
| GET, POST | /api/grooming |
| GET, POST | /api/owners |
40 total — 4 admin/cron/internal (hidden) — +26 more primary endpoints not shown. Source: src/routes/api/**/+server.{ts,js} in the madriguera repo.
Events emitted
| Event | Receivers | Description |
|---|---|---|
activity.logged | camino | A billable or tracked activity has been logged (time entry from Agora ghost timer, POS customer action in Caracol, vet/hotel log in Cosmos Pet or Madriguera) and sent to Camino for CRM activity tracking |
owner.registered | camino, colectiva | A property or pet owner was registered in Madriguera — Camino creates a CRM contact, Colectiva records the new account for revenue tracking. |
pet.registered | colectiva | [auto-derived] pet.registered event |
report_card.generated | colectiva | [auto-derived] report_card.generated event |
reservation.checked_out | colectiva | [auto-derived] reservation.checked_out event |
reservation.created | caracol, colectiva, hoja | A restaurant reservation has been created |
walk.completed | colectiva, camino | [auto-derived] walk.completed event |
Events consumed
| Event | Senders | Description |
|---|---|---|
cfdi.cancelled | constanza | A CFDI invoice has been cancelled |
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. |
customer.merged | camino | Two duplicate customer records were merged in Camino — receiver apps update their local foreign keys to the canonical customer ID. |
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. |
employee.missing_data | constanza | Constanza 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. |
handoff.completed | baul | Generic physical handoff completed with proof. Covers document delivery, product returns, sample collection, key handoff, equipment transfer. Baul physical layer event. |
invoice.compliance_issue | constanza | Constanza detected an invoice compliance issue (missing/invalid RFC, duplicate, format error) — routed back to the source app for review. |
payment.received | colectiva, constanza | A payment has been processed via Colectiva |
payment.reconciled | constanza | Constanza completed bank reconciliation for a payment — receiver apps update their local payment records to mark the payment as reconciled against the bank statement. |
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. |
subscription.changed | camino | A subscription plan has been upgraded or downgraded — receiver apps update their tier gates and feature access accordingly. |
subscription.limit_approaching | camino | A tenant's subscription usage is approaching the plan limit — Camino notifies subscriber apps to surface a plan-upgrade prompt to the tenant operator. |
subscription.suspended | camino | A subscription was suspended due to non-payment or compliance issue — Camino disables access until resolution. Receiver apps lock out the tenant and surface a suspension banner. |
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
reservation.createdfollows the same event name used by Mancha (restaurant reservations) — both are consumed by Colectiva. If you are building a multi-vertical billing integration, use thesourcefield to differentiate Madriguera reservations from Mancha ones.- GPS walk data at
/api/walks/[id]/gpsreturns raw coordinate arrays and can be large. Do not fetch this in bulk — always scope by walk ID. subscription.suspendedis consumed in addition to the standardactivated/cancelledpair. A suspended account retains data but loses write access; build your adapter to handle the three-state model (active / suspended / cancelled).