API
DOCS

The Wash Party REST API lets Rolling Suds operators and integration partners create parties, manage rosters, and sync jobs to field management tools like Workiz.

Overview

Wash Party exposes a REST API over HTTPS. All requests and responses use JSON. The base URL for all endpoints is:

https://washparty.net/api

Current API Status

The Wash Party API is currently in private beta. Operator API keys are available to Rolling Suds franchisees and approved integration partners. Email hello@washparty.net to request access.

Authentication

The Wash Party API uses session-based auth for the admin panel and Bearer token auth for programmatic access. Include your API key in the Authorization header:

Authorization: Bearer wp_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

API keys are prefixed with wp_live_ (production) or wp_test_ (sandbox). Keep your key secret — it grants full operator access.

Test Environment

wp_test_…

No real charges, no Workiz jobs sent

Live Environment

wp_live_…

Real Stripe charges + Workiz sync

Parties

A Party represents a group booking event for a specific street. Parties move through a lifecycle: pending → active → confirmed → completed (or cancelled).

GET
/api/party/:code

Retrieve a party by its short code. Returns status, participants, and tier info.

POST
/api/party/create

Create a new Wash Party. Requires street, city, zip, serviceDate, and captain details.

POST
/api/party/:code/join

Add a participant to an open party. Returns a Stripe checkout URL if a deposit is required.

GET
/api/party/search

Find active parties by street name and/or ZIP code.

Party Object

{
  "id":                    "clxxx...",
  "code":                  "OAK4287",
  "street":                "Oak Glen Drive",
  "city":                  "Collierville",
  "zip":                   "38017",
  "status":                "active",          // pending | active | confirmed | completed | cancelled
  "serviceDate":           "2026-06-15T00:00:00.000Z",
  "deadlineAt":            "2026-06-08T00:00:00.000Z",
  "depositRequired":       true,
  "depositCents":          2500,
  "captainMessage":        "Let's get the whole block clean!",
  "participants":          [ /* ParticipantObject[] */ ]
}

Participants

Each participant is a homeowner who has reserved a spot on a party. Their status tracks the payment lifecycle.

POST
/api/party/:code/join

Join a party. Body: { firstName, lastName, houseNumber, phone, email, selectedServiceCents[], referralCode?, specialInstructions? }

Participant Object

{
  "id":                "clyyy...",
  "firstName":         "Jane",
  "lastName":          "D",
  "houseNumber":       "104",
  "joinIndex":         3,
  "status":            "confirmed",  // pending_payment | confirmed | cancelled | refunded
  "earlyBirdEligible": true,
  "referralCode":      "JAN8821"
}

Pricing / Quote

When joining, the API returns a quote showing group discount, early-bird bonus, and amount due:

// POST /api/party/:code/join response
{
  "data": {
    "checkoutUrl":  "https://checkout.stripe.com/...",   // if deposit required
    "successUrl":   "/party/OAK4287?success=1&pid=...",  // if no deposit
    "quote": {
      "subtotal":           52500,
      "tierDiscount":       7875,
      "earlyBirdDiscount":  2625,
      "discountedSubtotal": 42000,
      "depositCents":       2500,
      "dueAtServiceCents":  39500
    }
  }
}

Admin Endpoints

Admin endpoints require an active operator session (cookie) or an admin-scoped API key. These power the Operator Dashboard.

GET
/api/admin/parties

List all parties with status, participant counts, and revenue.

POST
/api/admin/parties/create

Create a party on behalf of an operator (no captain deposit required).

POST
/api/admin/parties/:id/extend

Extend the party deadline by a specified number of days.

POST
/api/admin/parties/:id/reactivate

Reactivate a cancelled or expired party with a new 7-day deadline.

POST
/api/admin/parties/:id/cancel

Cancel a party and issue Stripe refunds to all confirmed participants.

POST
/api/admin/parties/:id/complete

Mark a party as completed and trigger post-service review emails.

POST
/api/admin/parties/:id/send-to-workiz

Push confirmed job roster to Workiz as individual service jobs.

POST
/api/admin/parties/:id/notify-deadline

Send deadline reminder SMS/email to all pending participants.

GET
/api/admin/export?partyCode=OAK4287

Download party roster as CSV (name, address, services, amounts).

Webhooks

Wash Party fires webhooks for key lifecycle events. Configure your endpoint URL in the operator dashboard under Settings → Integrations.

party.createdA new party was created by a block captain.
party.confirmedParty reached 3+ confirmed homes and is now locked.
party.cancelledParty was cancelled. Refunds have been issued.
participant.joinedA new participant paid their deposit and joined.
participant.cancelledA participant cancelled their reservation.
workiz.sync_completeConfirmed roster was successfully sent to Workiz.

Webhook Payload

POST https://your-endpoint.com/webhooks/washparty
Content-Type: application/json
X-WashParty-Signature: sha256=<hmac>

{
  "event":     "participant.joined",
  "timestamp": "2026-06-01T14:22:00.000Z",
  "data": {
    "partyCode":       "OAK4287",
    "participantId":   "clyyy...",
    "depositCents":    2500,
    "servicesChosen":  ["house", "driveway"]
  }
}

Errors & Codes

All error responses return a consistent JSON shape with a machine-readable code:

{
  "error": {
    "code":    "PARTY_DEADLINE_PASSED",
    "message": "The sign-up deadline for this party has passed.",
    "details": {}
  },
  "requestId": "941cf436-9dcd-..."
}
400VALIDATION_ERRORMissing or invalid request fields.
401AUTH_ERRORMissing or expired session / API key.
404NOT_FOUNDParty or participant not found.
409PARTY_FULLParty has reached the 15-home maximum.
409PARTY_DEADLINE_PASSEDThe sign-up window has closed.
409PARTY_CANCELLEDCannot join a cancelled party.
409DUPLICATE_EMAILEmail already registered for this party.
500INTERNAL_ERRORUnexpected server error. Contact support with the requestId.

Rate Limits

Public endpoints (party lookup, search, join) are rate-limited to 60 requests / minute per IP. Admin API endpoints are limited to 300 requests / minute per key. Rate limit headers are included in every response:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1717257600

Webhook delivery is retried up to 5 times with exponential backoff (2s, 4s, 8s, 16s, 32s). Endpoints must return 2xx within 10 seconds to be considered successful.

GET API ACCESS

The Wash Party API is available to Rolling Suds franchisees and approved technology partners. Reach out to get your API key and integration support.

REQUEST API ACCESS →