Skip to content

Mancha (Reservations)

Universal reservations & scheduling. Restaurants, clinics, donation centers, vet visits — one booking primitive with domain-flexible terminology.

URL: mancha.redbroomsoftware.comStatus: LIVE Tier: T2 (narrow surface)

What you can integrate

  • Availability queries — open time slots for a venue on a date, sized to a party
  • Reservation create / lookup / cancel — the full booking primitive
  • Multi-domain reuse — restaurants, blood donation (Continua), vet clinics (Cosmos Pet) all use the same API with terminology that maps to their vertical
  • Metering hooks — per-reservation events flow into Constanza for billing

Authentication

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

API keys are scoped per partner app. For B2C consumer flows (Continua blood-donor portal, Cosmos Pet scheduler), use the ecosystem partner key issued to the host app — Mancha does not expose a direct consumer OAuth surface.

Endpoints

MethodPath
POST/api/ai/demand-forecast
POST/api/ai/no-show-risk
POST/api/ai/pricing
GET/api/analytics
GET/api/availability/:restaurantId
GET/api/billing
POST/api/ecosystem/bookings
GET, PATCH/api/ecosystem/bookings/:id
POST/api/ecosystem/upsell-track
GET, POST/api/ecosystem/webhooks

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

Events emitted

EventReceiversDescription
ai.usagecolectivaAI token usage report for metering
app.tenant_id_assigned(none declared)An app has bound its local tenant identifier to a canonical RBS org for the first time (or backfilled an existing binding). NOT routed via the standard webhook bus — producer calls CPR POST /api/v1/internal/tenant-mapping/upsert directly with X-RBS-Auth: App HMAC. Receiver list is empty because no app-side handler exists; the consumer is the Control Plane (ecosystem.redbroomsoftware.com). Topic 25 Phase 3 substrate — populates app_tenant_mappings junction. Senders list will grow as each app's producer wires (caracol first per S381 Phase 1 Session 3).
customer.identifiedcaminoA customer was identified during a transaction in Mancha (restaurant POS) — Camino creates or updates the CRM contact record with the transaction context for relationship tracking.
order.completedcolectiva, constanzaAn e-commerce order has been completed (paid + fulfilled)
reservation.arrivedcaracol, hojaA reservation party arrived at the restaurant — Caracol POS updates the table status from waiting to arrived, La Hoja POS mirrors the reservation timeline.
reservation.cancelledcaracolA reservation was cancelled in Mancha — Caracol POS removes from the waitlist/queue and releases the table.
reservation.completedcaracol, colectiva, hojaA restaurant reservation was completed (the party finished dining) — Colectiva records for revenue analytics, Caracol POS releases the table, La Hoja POS mirrors the timeline.
reservation.createdcaracol, colectiva, hojaA restaurant reservation has been created
reservation.seatedcaracol, hojaA reservation party was seated at the restaurant — Caracol POS starts the table timer, La Hoja POS mirrors the seating event.
reservation.updatedcaracol, hojaReservation details changed in Mancha (time/party size/contact) — Caracol POS and La Hoja POS update their mirrors.
schedule.cancelledritoA deal scheduling appointment was cancelled in Mancha — Rito removes or marks the schedule record as cancelled.
schedule.completedritoA deal scheduling appointment was completed in Mancha — Rito marks the schedule as completed and may trigger next-step actions in the deal pipeline.
schedule.createdritoA new deal scheduling appointment was created in Mancha — Rito registers it on the deal record for pipeline tracking.
schedule.updatedritoA deal scheduling appointment was updated in Mancha — Rito syncs the changed time or attendee details.

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.chargeback_resolvedcolectivaA MercadoPago chargeback reached a terminal state. Colectiva emits this when verdict.terminal && outcome ∈ {lost, won, coverage}. Constanza uses it to post a counter-póliza and (on lost + originalCfdiUuid present) cancel the original CFDI. Canonical contract is whatever colectiva/src/lib/services/ecosystem-webhook.service.js notifyPaymentChargebackResolved emits.
payment.completedcolectivaA payment transaction was fully completed in Colectiva — source apps confirm the payment for delivery orders, subscriptions, or escrow. Used by baul to confirm delivery payment, mancha for reservation payment, constanza for accounting, and cosmos-pet for vet clinic subscription payments.
payment.expiredcolectivaA pending payment expired without being completed — Colectiva notifies the originating app to cancel the pending reservation or order. cosmos-pet uses it to mark vet-clinic subscription payments as expired.
payment.failedcolectivaA payment attempt failed in Colectiva — notifies source apps (baul, mancha) to surface the failure to the user and offer retry.
payment.refundedcolectiva, comalA payment was refunded by Colectiva — voluntary refund initiated by a tenant app or by Colectiva ops, OR an involuntary MP-platform-side refund. Receivers branch on paymentReferenceType. For voluntary refunds with proration, isPartial=true and proration block carries period bounds. paymentLayer is the primary routing discriminator; receivers MUST check it before paymentReferenceType.
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.renewedcamino, colectivaA subscription was successfully renewed for a new billing period — receiver apps update the subscription period end date and resume any paused features.

Webhook signature

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

Domain mapping

Mancha termRestaurantBlood donationVet clinic
RestaurantRestaurantDonation centerClinic
TableTableDonation stationExam room
ShiftService windowOperating hoursClinic hours
Party sizeGuestsAlways 1Pets + owner
ReservationBookingAppointmentAppointment

Gotchas

  • The resource is always called restaurantId on the wire, regardless of vertical — don't rename it in your adapter layer; keep the ecosystem vocabulary aligned with the SDK types.
  • Cancellations emit booking.cancelled with the reason field; don't confuse "no-show" (venue side) with "cancel" (consumer side) — they are different events in flight, even if both hit the same endpoint.

Red Broom Software Ecosystem