Skip to content

Documentation

Get from zero to first scored customer.

Lightweight docs for a lightweight product. Most users finish setup in under ten minutes.

Getting started

1. Connect your Stripe account

Sign in to Ebb, click Connect Stripe, and approve the OAuth request. Ebb requests read-only scopes — we cannot create charges, issue refunds, modify subscriptions, or change customer records. If you ever want to revoke access, you can do it from the Stripe Connected Apps page in one click.

2. Wait for the historical backfill

On first connect, Ebb pulls the last 12 months of subscription, invoice, and customer events. For most accounts under 5,000 customers this takes under five minutes. You'll see a progress indicator in the dashboard.

3. Open your first digest

Once the backfill finishes, Ebb scores every active customer overnight. The first digest arrives in your inbox the next Monday morning. You can also view scores immediately from the Customers tab.

Optional: enrich with usage events

Ebb works on Stripe data alone, but the model gets considerably sharper if you send a single event each time a user logs in or completes a key action. Use either the API (below) or our four-line JS snippet. Login and feature-use events roughly double signal accuracy in our pilot data.

REST API

All endpoints require an Authorization: Bearer <your-key> header. Generate a key from Settings → API keys. The base URL is https://api.ebb.nz/v1.

List at-risk customers

GET /v1/customers?risk=at_risk

200 OK
{
  "data": [
    {
      "id": "cus_QwertyAcme",
      "external_id": "cus_NxxxStripe",
      "name": "Acme Co.",
      "ebb_score": 78,
      "risk_band": "at_risk",
      "top_signals": ["login_drop", "feature_drop", "sentiment_shift"],
      "scored_at": "2026-04-15T03:14:00Z"
    }
  ],
  "next_cursor": null
}

Score a single customer

GET /v1/customers/cus_QwertyAcme/score

200 OK
{
  "ebb_score": 78,
  "risk_band": "at_risk",
  "components": {
    "login_drop": 0.34,
    "feature_drop": 0.28,
    "sentiment_shift": 0.18,
    "billing_risk": 0.12,
    "plan_change": 0.08
  },
  "as_of": "2026-04-15T03:14:00Z"
}

Send a usage event

POST /v1/events
{
  "external_customer_id": "cus_NxxxStripe",
  "event": "logged_in",
  "occurred_at": "2026-04-15T09:22:11Z"
}

Webhooks

Add a webhook destination from Settings → Webhooks. Ebb signs every payload with HMAC-SHA256 in the X-Ebb-Signature header. Verify in your handler before trusting the body.

Events

  • customer.risk.entered — a customer crossed into a higher band.
  • customer.risk.exited — a customer fell back to a safer band.
  • customer.score.updated — daily score recalculated (verbose; usually not what you want).
  • digest.weekly.sent — fired right after your weekly digest goes out.

Sample payload

POST <your-url>
X-Ebb-Signature: sha256=...

{
  "type": "customer.risk.entered",
  "occurred_at": "2026-04-15T03:14:00Z",
  "customer": {
    "id": "cus_QwertyAcme",
    "ebb_score": 71,
    "risk_band": "at_risk",
    "previous_band": "watch"
  }
}

Integrations

Stripe ships at launch. Slack ships with the Growth plan. The following are planned and currently coming soon:

  • Shopify — for subscription-box and membership operators.
  • HubSpot — for syncing risk back to deal/contact records.
  • Intercom — for ticket sentiment as a first-class signal.
  • Pipedrive — for retainer-based agencies.

If you need a specific integration, email hello@ebb.nz and we'll fast-track it based on demand.