Skip to main content
The affiliate program pays a recurring commission on every payment made by customers you refer, for as long as they keep paying. You enroll from Dashboard → Affiliates, which is also where the numbers below are rendered; these endpoints are the same data.
This is the general affiliate program, open to anyone with an account. It is separate from the Hosting Partnership, which is a 20% rev-share arranged with maintainers of open-source apps we host. Don’t enroll in both for the same traffic.

How it works

  1. Enroll. You get a referral code, and two links built from it.
  2. Share the link. A click is recorded against your code.
  3. They sign up through it. The signup is linked to you as a pending referral.
  4. They pay. The referral flips to active and you earn a commission on that payment and every one after it.
Commission is a percentage of what the customer actually paid, taken at your tier’s rate at the moment of payment. The rate is snapshotted onto each earning, so a later tier change doesn’t rewrite history. Each invoice earns once.

Tiers

You start on Starter and move up automatically as the revenue you’ve referred crosses a milestone. Reaching a tier also pays a one-off bonus. Upgrades happen on the payment that crosses the milestone, and are never downgraded. Read the live values from GET /api/affiliates/dashboard rather than hard-coding these - tiers are configurable, and your account may be on a negotiated one.

Enroll

No request body. Enrolling twice is safe - you get the existing record back rather than a second one. Response: 201 Created
All money fields are in cents.

Dashboard

Everything the Affiliates page shows, in one call. Response: 200 OK
Returns 404 with not enrolled if you haven’t enrolled yet. That is the check to make before rendering anything - the same 404 comes back from referrals, earnings, payouts and settings.

Referrals

Response: 200 OK
Referral statuses: pending (signed up, hasn’t paid), active (has paid at least once), churned. Emails are masked. You can see that someone signed up and whether they’re paying; you cannot see who they are or reach them through us.

Earnings

Same pagination. One row per commission-earning payment.
commission_rate and tier_slug are recorded per earning, so this list stays accurate across tier changes.

Payouts

Same pagination. Payouts are recorded by us when money is sent; there is no endpoint to request one.

Settings

A custom slug is 3-30 characters, lowercase letters, numbers and hyphens only. Response: 200 OK - returns the updated affiliate record. Your original referral_code keeps working after you set a slug.

Recording a Visit

Public, no auth. Records a click against a referral code - this is what our own site calls when someone lands with a ?ref= or ?r= parameter, and you only need it if you’re building your own landing page in front of a referral link.
Always returns 200 OK with {"status": "ok"}, including for an unknown code: it’s tracking, and it never blocks the page it’s called from. A click from the affiliate’s own logged-in session is silently ignored, so you can’t inflate your own visit count.