FirstPromoter · AsyncAPI Specification

Firstpromoter Webhooks

Version

View Spec View on GitHub Affiliate MarketingReferral TrackingSoftware-as-a-ServiceCommission ManagementReward DistributionPromotersPartner MarketingInfluencer MarketingPayoutsAttributionWebhookMCPAsyncAPIEvents

AsyncAPI Specification

Raw ↑
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.
All 92 tools →

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.