INTEGRATION

Revenue Hits. Subscriber Churns. Your Slack Channel Knows in 5 Seconds.

Your team lives in Slack. Your revenue data should too. This integration pushes every OFAPI event — tips, new subscribers, churn signals, payout confirmations — as a formatted message to the exact channels where your team is already making decisions. No dashboard refreshes. No delayed summaries. No missed windows. Built from the experience of running a 100-person operation managing 60+ creators — revenue intelligence belongs inside Slack, not exported to it hours later. Connect in under 15 minutes.

What You Can Send to Slack

Revenue alerts

Get notified when a creator crosses a daily or monthly revenue threshold. Track subscription income, tips, PPV sales, and referral earnings in real time.

Churn notifications

Know the moment a subscriber expires or fails to renew. Trigger re-engagement workflows before it is too late.

New subscriber alerts

Celebrate every new subscriber with an instant Slack message that includes username, subscription tier, and spend history.

Payout confirmations

Get a message in your finance channel when a payout processes, including the amount and transaction ID.

Setup Guide

1

Create a Slack Incoming Webhook

In your Slack workspace, navigate to Apps → Incoming Webhooks and create a new webhook. Select the channel where you want OFAPI alerts to appear. Copy the webhook URL — it will look like https://hooks.slack.com/services/T.../B.../xxx.

2

Register Your Webhook in OFAPI

In the OFAPI dashboard, go to Settings → Webhooks and add a new endpoint. Point it at your relay server (see Step 3) and subscribe to the events you care about: subscriber.new, subscriber.expired, revenue.received.

3

Deploy a Relay Script

Build a small HTTP server that receives OFAPI webhook events and forwards them to Slack as formatted messages. Here is a complete example in Python using Flask:

slack_relay.py Python
import os
import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

SLACK_WEBHOOK = os.environ["SLACK_WEBHOOK_URL"]
OFAPI_SECRET  = os.environ["OFAPI_WEBHOOK_SECRET"]

@app.route("/webhook", methods=["POST"])
def handle_webhook():
    payload = request.json
    event   = payload["event"]
    data    = payload["data"]

    # Format message based on event type
    if event == "revenue.received":
        text = f":moneybag: *Revenue* — {data['creator']} earned ${data['amount']:.2f} ({data['type']})"
    elif event == "subscriber.new":
        text = f":tada: *New Sub* — {data['username']} subscribed to {data['creator']}"
    elif event == "subscriber.expired":
        text = f":warning: *Churn* — {data['username']} expired on {data['creator']}"
    else:
        text = f":bell: *{event}* — {data}"

    # Send to Slack
    requests.post(SLACK_WEBHOOK, json={"text": text})
    return jsonify({"ok": True}), 200
4

Test the Integration

Use the Send Test Event button in the OFAPI dashboard webhook settings. A test payload will fire to your relay, and you should see a formatted message in your Slack channel within seconds. If nothing appears, check your server logs and confirm the Slack webhook URL is correct.

Example Slack Message Payload

This is the JSON your relay script sends to the Slack Incoming Webhook API:

Slack API Request Body JSON
{
  "text": ":moneybag: *Revenue* — luna_model earned $47.50 (tip)",
  "channel": "#revenue-alerts",
  "username": "OFAPI Bot",
  "icon_emoji": ":chart_with_upwards_trend:"
}

A churn you see 5 seconds late is a subscriber you can still save

The re-engagement window closes fast. Your team needs the signal in Slack the moment it happens — not in a morning report, not in a manual dashboard check. Set this up once and the data flows automatically from that point forward.