Background

Reward custom events with fixed cash

Pay a fixed cash bonus on a zero-revenue custom event so the earning can enter the next payout, including Managed Payouts.

Silvestro
Written by Silvestro
Updated more than a week ago

Reward custom events with fixed cash

Pay a fixed cash bonus when a referred customer completes a custom action that is not a sale. A dedicated non-sale bonus endpoint is not available yet. This is the supported path today.

Example event ideas, not a required list: qualified visit, newsletter signup, first deposit, completed onboarding, KYC approved, first content publish.

Approval Type on the incentive decides when the earning can pay out. Immediate makes it ready for the next payout as soon as the event is accepted. Hold Period waits the configured days. Manual Review waits until someone approves it. Managed Payouts still needs that setting on and a payment method on the affiliate.

Before you begin

Make sure you have:

  • an Affonso API key with write:commissions permission
  • access to Groups
  • a referral to credit, identified by referral_id, customer_id, or external_user_id
  • affiliate tracking already installed so that identifier matches an existing referral

Do not send POST /v1/commissions with sale_amount 0. That endpoint requires a positive sale_amount.

Steps

1

Add a fixed cash incentive

Open Groups, click the group, then Incentives Setup. Click Add Incentive.

On Apply to, choose Specific products.

Apply to Specific products

Create a product or select an existing one. Set Price or Plan ID to a stable ID you control. That is the product ID you send later in product_ids. Add one product per bonus type you want to pay.

Create New Product for the event incentive

On Select or Create an Incentive, click Create New Incentive. Set Incentive Type to Fixed amount and enter the cash amount. Set Approval Type to Immediate, Hold Period, or Manual Review.

Fixed amount and Approval Type Immediate

Click Create Incentive, then Add Incentive. The incentive is assigned to this group.

Do not use Percentage. A percent of a $0 sale is $0.

2

Send a conversion event for each bonus

For each bonus, send POST /v1/events with:

  • event_name: a name from your system, required by the Create Event API
  • event_type: conversion
  • sale_amount: 0
  • sale_amount_currency: for example USD
  • product_ids: the matching product, using the product ID you set
  • referral_id or customer_id or external_user_id
  • a unique external_event_id for idempotency. A new ID lets the same bonus type pay again.
AFFONSO_API_HOST=api.affonso.io
curl -X POST "https://${AFFONSO_API_HOST}/v1/events" \
  -H "Authorization: Bearer sk_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "event_name": "visit_completed",
    "event_type": "conversion",
    "sale_amount": 0,
    "sale_amount_currency": "USD",
    "product_ids": ["visit"],
    "external_user_id": "usr_104982",
    "external_event_id": "evt_visit_20260907_001"
  }'

See the Create Event API for every field.

3

Confirm the earning and payout

The earning shows on Earnings. With Immediate, it is ready for the next payout right away. With Managed Payouts, it is included when that setting is on and the affiliate has a payment method.

Do not use Signups (Pay Per Lead), Trials (Pay Per Trial), or a milestone event for this. Those types do not match Specific products. Lead and Trial pay only once per referral.

Common issues

POST /v1/commissions with sale_amount 0 is rejected

Cause: That endpoint requires a positive sale_amount.

Solution: Use POST /v1/events with event_type conversion and sale_amount 0, plus a matching Specific products fixed incentive.

The event is accepted but no cash earning is created

Cause: The group incentive is a percentage, or product_ids does not match the product ID you set, or Apply to is Lead, Trial, or a plan-wide sale option instead of Specific products.

Solution: Use Fixed amount, Apply to Specific products, and send the matching product_ids.

Lead or trial paid once, then nothing

Cause: Lead and Trial incentives are one-shot per referral. They also do not match Specific products. Milestone events do not match Specific products either.

Solution: Send event_type conversion against a Specific products fixed incentive. Use a new external_event_id for each repeat.

Repeating the same bonus did not pay again

Cause: Affonso reused the same external_event_id and returned the prior result.

Solution: Send a unique external_event_id for each occurrence.

Was this article helpful?

bg

Ready to Scale Your SaaS?

Affonso is the easiest way to launch your own affiliate program. We take care of the technical stuff, so you can focus on growing your business.