Own every part of your partner program
Run your partner marketing program with complete control, all under your own branding. Bring your vision to life with our customization service.
Join our affiliate program
Benefit
By joining, you agree to the Terms and Privacy Policy
Generic program works against your brand

Generic, not yours
A program that doesn't look like the brand weakens the recognition you've built.

Off-brand communication
Partners receive notifications from a platform, not from your brand.

Time lost to workarounds
Rigid platform forces your team to bend the program around the tool.
Brand it
For programs getting off the ground.

Brand assets
Add your logo and brand colors to the affiliate sign-up page and portal.

Notifications
Send on-brand notifications with free-to-edit email templates.
Own it
For programs ready to look fully independent.

Custom domain
Move partner login, sign-up, and referral links onto your own domain.

White label email
Send emails from your own address — and get replies back, with deliverability handled.
Build it
Connect your own systems with API access and real-time webhooks
public function handle(Request $request, Closure $next): mixed
{
$secret = 'your-subscription-secret'; // Replace with your secret
$payload = $request->getContent(); // Raw request body
$receivedSignature = $request->header('X-UpPromote-Signature');
$calculatedSignature = hash_hmac('sha256', $payload, $secret);
if (hash_equals($receivedSignature, $calculatedSignature)) {
logger('Webhook valid');
return $next($request);
} else {
logger('Webhook invalid. Received: ' . $receivedSignature . ', Calculated: ' . $calculatedSignature);
return response()->json(['error' => 'Invalid signature'], 401);
}
}const crypto = require('crypto');
function verifyWebhook(req, res, next) {
const secret = "your-subscription-secret"; // Replace with your secret
const payload = req.rawBody; // Ensure raw body middleware is used
const receivedSignature = req.headers["x-uppromote-signature"];
const calculatedSignature = crypto
.createHmac("sha256", secret)
.update(payload, "utf8")
.digest("hex");
if (crypto.timingSafeEqual(Buffer.from(receivedSignature), Buffer.from(calculatedSignature))) {
console.log("Webhook valid");
next();
} else {
console.error("Webhook invalid");
res.status(401).json({ error: "Invalid signature" });
}
}import hmac
import hashlib
from flask import request, abort
def verify_webhook():
secret = b'your-subscription-secret' # Replace with your secret
payload = request.get_data() # Raw request body
received_signature = request.headers.get('X-UpPromote-Signature')
calculated_signature = hmac.new(secret, payload, hashlib.sha256).hexdigest()
if hmac.compare_digest(received_signature, calculated_signature):
print("Webhook valid")
return True
else:
print("Webhook invalid")
abort(401, "Invalid signature")require 'openssl'
before '/webhook' do
secret = 'your-subscription-secret' # Replace with your secret
payload = request.body.read
received_signature = request.env['HTTP_X_SIGNATURE']
calculated_signature = OpenSSL::HMAC.hexdigest("SHA256", secret, payload)
halt 401, "Invalid signature" unless Rack::Utils.secure_compare(received_signature, calculated_signature)
end99,99%
Uptime
150K+
transactions per minute
10K+
API requests per day
Choose how you get started
Every brand has its own logic. Go self-serve with all core features, or get a custom setup built around your needs.
Build on your own
Launch your affiliate program with:
- Access to all UpPromote features
- Quick setup in minutes, no coding required
- Comprehensive documentation & guide
- Plan-based subscription & performance fee
Get tailored solutions
And hands-on support for your business:
- Dedicated Customer Success Manager
- Custom logic for existing features
- New features for bespoke requirements
- Integrations with current tech stack
- Custom pricing based on your scope



