FirstPromoter · AsyncAPI Specification
Firstpromoter Webhooks
Version
View Spec
View on GitHub
Affiliate MarketingReferral TrackingSoftware-as-a-ServiceCommission ManagementReward DistributionPromotersPartner MarketingInfluencer MarketingPayoutsAttributionWebhookMCPAsyncAPIEvents
AsyncAPI Specification
generated: '2026-08-13'
method: searched
source: >-
https://docs.firstpromoter.com/webhooks-v2/overview,
https://docs.firstpromoter.com/webhooks-v2/event-types,
https://docs.firstpromoter.com/webhooks-v2/payload,
https://docs.firstpromoter.com/webhooks-v2/deliveries,
openapi/firstpromoter-v2-webhooks-openapi.yml
name: FirstPromoter Webhooks v2
description: >-
FirstPromoter publishes no AsyncAPI document. Its event surface is an HTTP webhook system
(webhooks v2) with 44 documented event types, a uniform payload envelope, a delivery-record model
with published retry backoff, and a full REST management API for subscriptions and deliveries.
This artifact captures that catalog; it is not an AsyncAPI and does not claim to be one.
asyncapi_published: false
asyncapi_probed:
- url: https://docs.firstpromoter.com/asyncapi.yaml
status: 404
- url: https://api.firstpromoter.com/asyncapi.json
status: 404
transport:
protocol: https
method: POST
content_type: application/json
timeout_seconds: 30
subscription_scope: account
subscription_limit: unlimited
campaign_filtering: true
custom_headers: true
signature: null
signature_note: >-
No HMAC or signature header is documented. Sender authentication is left to the consumer, via
arbitrary custom headers configured on the subscription.
delivery:
statuses:
- name: pending
meaning: Queued but not yet attempted.
- name: delivered
meaning: The endpoint returned a 2xx response.
- name: retrying
meaning: An attempt failed; more retries are scheduled.
- name: failed
meaning: All retries exhausted without a successful response.
retry:
default_max_retries: 3
disable_with: max_retries = 0
backoff: attempt x 20 minutes
schedule:
- attempt: 1
delay: 20 minutes
- attempt: 2
delay: 40 minutes
- attempt: 3
delay: 60 minutes
manual_retry_operation: POST /webhooks/{webhook_id}/webhook_deliveries/{id}/retry_delivery
payload:
envelope_fields:
- name: event_id
type: string
description: Unique UUID for the event. The deduplication key - the same event_id may arrive twice.
- name: event_type
type: string
description: The {entity}.{action} event type string.
- name: action
type: string
enum: [created, updated, deleted]
- name: entity_type
type: string
description: Type of the resource that changed, e.g. promoter, referral, commission.
- name: entity_id
type: number
description: Database ID of the resource.
- name: changes
type: object
description: >-
For updated events, each changed field maps to [old_value, new_value]. Empty on created and
deleted, where the full resource is in data.
- name: data
type: object
description: Full serialized state of the resource at the time of the event.
- name: timestamp
type: string
format: date-time
request_headers:
- name: Content-Type
value: application/json
- name: X-Event-Id
value: Same as event_id in the payload.
- name: X-Event-Type
value: Same as event_type in the payload.
management_api:
base: https://api.firstpromoter.com/api/v2/company
spec: openapi/firstpromoter-v2-webhooks-openapi.yml
operations:
- GET /webhooks
- POST /webhooks
- GET /webhooks/{id}
- PUT /webhooks/{id}
- DELETE /webhooks/{id}
- GET /webhooks/event_types
- POST /webhooks/test
- GET /webhooks/{webhook_id}/webhook_deliveries
- GET /webhooks/{webhook_id}/webhook_deliveries/{id}
- POST /webhooks/{webhook_id}/webhook_deliveries/{id}/retry_delivery
subscription_fields:
- name: url
required: true
type: string
- name: event_types
required: true
type: array
- name: campaign_ids
required: false
type: array
default: '[1] (all campaigns)'
- name: description
required: false
type: string
- name: active
required: false
type: boolean
default: true
- name: headers
required: false
type: object
- name: max_retries
required: false
type: integer
default: 3
events:
- group: Promoters
types:
- name: promoter.created
description: A new promoter signed up or was created via the API.
- name: promoter.updated
description: A promoter's account details were changed.
- name: promoter.deleted
description: A promoter was deleted.
- name: promoter.balance.updated
description: A promoter's earnings, current, or paid balance changed.
- group: Promoter campaigns
types:
- name: promoter_campaign.created
description: A promoter was added to a campaign.
- name: promoter_campaign.updated
description: A promoter's participation in a campaign was changed.
- name: promoter_campaign.deleted
description: A promoter was removed from a campaign.
- name: promoter_campaign.accepted
description: A promoter's campaign application was accepted.
- name: promoter_campaign.pending
description: A promoter's campaign participation was set to pending review.
- name: promoter_campaign.rejected
description: A promoter's campaign application was rejected.
- name: promoter_campaign.blocked
description: A promoter was blocked from a campaign.
- name: promoter_campaign.inactive
description: A promoter was set to inactive in a campaign.
- group: Referrals
types:
- name: referral.created
description: A new referral (lead or customer) was tracked.
- name: referral.updated
description: A referral's details changed.
- name: referral.deleted
description: A referral was deleted.
- name: referral.converted
description: A referral (lead) was converted to a customer.
- name: referral.cancelled
description: A referral was cancelled.
- name: referral.moved
description: >-
A referral was moved between campaigns. Only fires on a campaign upgrade/downgrade
threshold crossing when referral moving is enabled on the campaign.
- group: Commissions
types:
- name: commission.created
description: A new commission was created.
- name: commission.updated
description: A commission was updated; the changes field carries the specific fields.
- name: commission.deleted
description: A commission was deleted.
- name: commission.approved
description: A commission was approved.
- name: commission.pending
description: A commission was set to pending.
- name: commission.denied
description: A commission was denied.
- group: Payouts
types:
- name: payout.created
description: A new payout was created.
- name: payout.updated
description: A payout was updated.
- name: payout.deleted
description: A payout was deleted.
- name: payout.pending
description: A payout was set to pending.
- name: payout.processing
description: A payout started processing.
- name: payout.completed
description: A payout was completed successfully.
- name: payout.failed
description: A payout failed.
- name: payout.cancelled
description: A payout was cancelled.
- name: payout.commissions.added
description: A commission was added to a payout.
- name: payout.commissions.removed
description: A commission was removed from a payout.
- group: Payout methods
types:
- name: payout_method.created
description: A promoter added a new payout method.
- name: payout_method.updated
description: A payout method was updated.
- name: payout_method.deleted
description: A payout method was removed.
- group: Payments batches
types:
- name: payments_batch.created
description: A new payment batch was created.
- name: payments_batch.updated
description: A payment batch was updated.
- name: payments_batch.deleted
description: A payment batch was deleted.
- name: payments_batch.initiated
description: A payment batch was initiated.
- name: payments_batch.processing
description: A payment batch started processing.
- name: payments_batch.completed
description: A payment batch completed successfully.
- name: payments_batch.failed
description: A payment batch failed.
- group: Contract documents
types:
- name: contract_document.signed
description: A promoter signed a contract document.
event_count: 44
legacy:
name: Legacy webhooks
shape: 3 hardcoded URLs per campaign, fixed event list, no campaign filtering, 15 s timeout
status: superseded by webhooks v2
note: >-
FirstPromoter documents the legacy system only in a comparison table on the v2 overview page.
No deprecation date or sunset policy is published for it.
Work with this as data
Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for asyncapi
4 MCP tools reach this
find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/firstpromoter-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.