---
referrals: 3
kind: program
payer: domain:acme.example
code: acme_signup
category: saas
status: open
at: 2026-10-30T00:00:00Z
---
# Acme signup bounty

Rates, amounts and names in this file are placeholders, not recommendations or market rates. Each party sets its own terms.

In plain words: a referrer earns a flat 17.00 once per customer, when a referred signup activates within 14 days. A signup alone earns nothing.

Change first: `payer`, `code`, the amount, the days, and what counts as `activation` in your product. Write that down in your own terms.

## Rules

### activation_bounty

- on: activation
- basis: flat
- amount: 17.00
- asset: USD
- once_per: customer
- requires.event: signup
- requires.within_days: 14

## Attribution

- model: last_touch
- window_days: 30
- customer_lock_days: 30
- lock_on: signup
- allowed_kinds: link, code, content

## Settlement

- holdback_days: 45
- clawback_days: 60
- fraud_clawback_days: 365
- cycle: monthly
- payout_asset: USD
- rails: ach

## Example

Made-up lines. The first customer signs up through Alice's link and activates in six days. A second activation line for the same customer earns nothing. The second customer takes 26 days to activate, past the 14. The third activates, then the payer finds the signup was fraud.

To run it, save this file as `REFERRALS.md` and these lines as `referrals.jsonl`, then run `node referrals.mjs run REFERRALS.md referrals.jsonl --as-of 2027-02-01T00:00:00Z`.

As of: 2027-02-01T00:00:00Z

```jsonl
{"type":"agreement","code":"alice","partner":"domain:alice.example"}
{"type":"event","at":"2026-11-03T10:00:00Z","kind":"signup","source":"manual:signup_1","customer":"cu_1a2b3c4d5e6f7081","token":"rf1.acme_signup.alice"}
{"type":"event","at":"2026-11-09T10:00:00Z","kind":"activation","source":"manual:activation_1","customer":"cu_1a2b3c4d5e6f7081"}
{"type":"event","at":"2026-11-15T10:00:00Z","kind":"activation","source":"manual:activation_1b","customer":"cu_1a2b3c4d5e6f7081"}
{"type":"event","at":"2026-11-05T10:00:00Z","kind":"signup","source":"manual:signup_2","customer":"cu_2b3c4d5e6f708192","token":"rf1.acme_signup.alice"}
{"type":"event","at":"2026-12-01T10:00:00Z","kind":"activation","source":"manual:activation_2","customer":"cu_2b3c4d5e6f708192"}
{"type":"event","at":"2026-11-10T10:00:00Z","kind":"signup","source":"manual:signup_3","customer":"cu_3c4d5e6f708192a3","token":"rf1.acme_signup.alice"}
{"type":"event","at":"2026-11-12T10:00:00Z","kind":"activation","source":"manual:activation_3","customer":"cu_3c4d5e6f708192a3"}
{"type":"event","at":"2026-12-15T10:00:00Z","kind":"fraud_reversal","source":"manual:fraud_3","customer":"cu_3c4d5e6f708192a3","reverses":"ev_c3fa738917737f4a983dd00a"}
```

## Worked result

Computed by `run_ledger` as of 2027-02-01T00:00:00Z, on the made-up lines above. Computed amounts are arithmetic on the records and terms you sent. They do not say what anyone owes. Your contract decides that.

| Event | Who | Working | Computed | Note |
|---|---|---|---|---|
| signup, 2026-11-03 | alice | Holds the credit for later events, with no amount here | 0.00 |  |
| signup, 2026-11-05 | alice | Holds the credit for later events, with no amount here | 0.00 |  |
| activation, 2026-11-09 | alice | Flat 17.00 | 17.00 | disclosure_unstated |
| signup, 2026-11-10 | alice | Holds the credit for later events, with no amount here | 0.00 |  |
| activation, 2026-11-12 | alice | Flat 17.00 | 17.00 | disclosure_unstated |
| activation, 2026-11-15 | alice | This rule pays once, and it already has. | 0.00 | once_per |
| activation, 2026-12-01 | alice | The rule's earlier event is missing, or too old. | 0.00 | requires |
| fraud_reversal, 2026-12-15 | alice | Reverses what was computed on activation, 2026-11-12 | -17.00 | disclosure_unstated |

`disclosure_unstated`: The token doesn't say whether this touch was disclosed. A short link proves nothing about that, and the referrer still carries the duty.

| Payee | Asset | Earned | Reversed | Net | Held | Payable |
|---|---|---|---|---|---|---|
| alice | USD | 34.00 | -17.00 | 17.00 | 0.00 | 17.00 |


## Why these settings

`lock_on: signup` holds the credit from signup to activation, `requires` keeps the bounty tied to a recent signup, and a long `fraud_clawback_days` gives the payer room to catch made-up signups.
