Skip to content

Servilleta (servilleta.redbroomsoftware.com)

Gig work and services marketplace — clients post tasks, service providers bid and complete them, with AI-assisted matching, escrow-backed payment, and automated invoicing.

URL: https://servilleta.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

  • Task completion events — receive task.completed when a provider finishes and the client confirms a gig; triggers Colectiva escrow release and invoicing
  • Payment status — consume payment.status_changed from Colectiva to reflect escrow state in your UI or notifications
  • Subscription lifecycle — feature gating for pro-provider tiers follows the full Camino subscription event set
  • AI task matching/api/tasks/match returns ranked providers for a task description using semantic search
  • Dispute resolution — a dispute endpoint puts a task on hold and suspends escrow release pending review

Authentication

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

User identity flows through Camino SSO via /auth/rbs. API keys are issued per account. Consumer-facing task browsing is public; bidding and completion require authentication.

Endpoints

MethodPath
GET, POST/api/ecosystem/upsell
GET, POST/api/ecosystem/webhooks
POST/api/leads
GET/api/logout
GET, PATCH/api/notifications
GET, POST/api/referrals
GET, POST/api/referrals/founding-badge
POST/api/session
GET, POST, DELETE/api/subscription
GET, POST/api/support

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

Events emitted

EventReceiversDescription
customer.createdcamino, constanza, garitaA new customer/contact/third-party record was created — used for CRM sync, fiscal pre-registration, and cross-app contact linking.
task.completedcolectiva, caminoA gig task has been completed and accepted by the client on Servilleta — triggers payment release from escrow to tasker wallet
upsell.task_volumecaminoServilleta free-tier tasker is at or near their active task limit (3 concurrent) or has reached a completed-task volume milestone (10/25/50). Camino surfaces a Pro Tasker upgrade recommendation.

Events consumed

EventSendersDescription
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.held(none declared)A payment was placed in escrow hold by Colectiva — Servilleta records the hold so the task status reflects that escrow is secured before work begins.
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.releasedcolectivaAn escrow payment was released from hold by Colectiva — Servilleta marks the task payment as released and triggers tasker payout.
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.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.

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

  • task.completed is the single outbound event. Escrow release, payout, and invoicing all happen downstream in Colectiva and Constanza — wire those event handlers separately if your integration needs the full financial trail.
  • Task disputes (/api/tasks/[id]/dispute) suspend the task.completed event from firing until the dispute is resolved. If you are building a billing integration, guard against missing completions by listening for payment.status_changed as a fallback signal.
  • The cron jobs (/api/cron/check-subscriptions, /api/cron/expire-tasks) are internal — do not call them directly.

Red Broom Software Ecosystem