Prerequisite You need administrative access to your Growi dashboard to configure webhook URLs.
Overview
When a brand has one or more Webhook URLs configured, Growi will send an HTTP POST request with a JSON body whenever a campaign’s creator affiliation changes state, a creator’s affiliate code is updated, or a creator generates an attributed sale.Configuration
In the Organization settings, configure:- Webhook URLs: One or more HTTPS destinations. Every active destination receives every event.
Event Types
The webhook payload includes anevent field to differentiate between actions:
If the system encounters an unknown status, it will fall back to
campaign_affiliate.<status>.Delivery Details
Non-2xx responses are treated as failures and will be retried. Delivery is at-least-once: use the payload’s
idempotency_key to deduplicate.
Payload Format
The request body is a single JSON object with the following fields:string
required
Event name that indicates what happened.
string
required
ISO-8601 timestamp of the underlying record update.
integer
required
Internal ID of the campaign-creator association record.
integer
required
Campaign ID.
integer
required
Organization ID.
integer
required
Creator’s user ID.
string
required
The raw status value on the record (e.g.,
active, removed, left).string
Campaign name, when available.
string
Brand slug, when available.
string
Creator email, when available.
string
Creator name, when available.
string
Default affiliate tag for the creator on this campaign, when available. For
code_updated, this is the new code.string
Present on
campaign_affiliate.code_updated only. The affiliate code before the change.string
Stable key for deduplicating redelivered events (delivery is at-least-once).
object
Present when the creator was submitted through the campaign applications API. Echoes the marketing attribution you sent with the applicant —
fbp, fbc, fbclid, event_id, event_source_url, UTM parameters, your external_id, and TikTok enrichment — so you can match the creator in your ad platform (for example, forwarding to Meta Conversions API).Optional fields are omitted when values are not present. For status events,
occurred_at uses the campaign affiliation record’s updated_at timestamp. For code_updated, it is the time the code change was committed.Sale Events
affiliate_sale.created fires when a sale is attributed to one of your creators (Shopify, website/API conversions, and app sales). On top of the shared fields above (campaign_name, organization_slug, user_email, user_name, tag, attribution), the payload carries:
integer
required
Growi’s id for the sale.
string
required
The external order id (e.g. the Shopify order).
integer
required
Order total in cents.
integer
Order subtotal in cents.
integer
The creator’s commission in cents.
string
required
ISO currency code (lowercase, e.g.
usd).string
required
shopify, website, ios, or android.string
one_time or subscription.string
initial for the customer’s first attributed sale, recurring for later purchases.string
Payout status of the sale (e.g.
unpaid).Example Payloads
Creator Added to Campaign
attribution appears only for creators submitted through the campaign applications API. Approval events are delivered a couple of minutes after the approval, once the creator’s affiliate code has been generated.Sale Attributed to a Creator
Creator Removed from Campaign
Creator Affiliate Code Updated
Troubleshooting
Webhook Not Being Received
Webhook Not Being Received
Ensure your webhook URL is correctly configured in Organization settings and is publicly accessible over HTTPS.
Receiving Duplicate Events
Receiving Duplicate Events
Implement idempotency in your webhook handler using the
idempotency_key field to deduplicate events (for older payloads without it, combine campaign_affiliate_id, event, and occurred_at).Webhook Failing with Timeout
Webhook Failing with Timeout
Your endpoint must respond within 10 seconds. Consider processing webhooks asynchronously and returning a 200 response immediately.
Got removed when changing a code
Got removed when changing a code
Changing a creator’s affiliate code does not remove them from the campaign. Status webhooks (
activated / removed / left) only fire on status changes. Code changes emit campaign_affiliate.code_updated instead. If you received a removed event around a code change, check whether the creator was also removed (or a delayed status webhook from an earlier action was delivered).