openapi: 3.0.1
info:
title: FirstPromoter Admin Commissions Webhook Deliveries API
version: '2.0'
description: REST API for managing affiliate programs, promoters, campaigns, referrals, rewards, and payouts in FirstPromoter. Supports pagination, filtering, and full CRUD operations across all affiliate program resources.
contact:
url: https://docs.firstpromoter.com
license:
name: Proprietary
url: https://firstpromoter.com/terms
servers:
- url: https://api.firstpromoter.com/api/v2
description: Production server
security:
- BearerAuth: []
tags:
- name: Webhook Deliveries
paths:
/company/webhooks/{webhook_id}/webhook_deliveries:
get:
summary: List deliveries for a subscription
tags:
- Webhook Deliveries
description: "Returns a paginated list of delivery attempts for the given subscription, ordered most-recent first. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/webhooks/{webhook_id}/webhook_deliveries`"
parameters:
- $ref: '#/components/parameters/AccountId'
- name: webhook_id
in: path
required: true
schema:
type: integer
description: ID of the webhook subscription.
- name: per_page
in: query
schema:
type: integer
default: 25
description: Number of results per page.
- name: page
in: query
schema:
type: integer
default: 1
description: Page number.
responses:
'200':
description: Paginated list of webhook deliveries
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WebhookDelivery'
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Subscription not found
/company/webhooks/{webhook_id}/webhook_deliveries/{id}:
get:
summary: Get a delivery
tags:
- Webhook Deliveries
description: "Returns the full details of a single delivery attempt, including the complete payload that was sent and the response received from your endpoint. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/webhooks/{webhook_id}/webhook_deliveries/{id}`"
parameters:
- $ref: '#/components/parameters/AccountId'
- name: webhook_id
in: path
required: true
schema:
type: integer
description: ID of the webhook subscription.
- name: id
in: path
required: true
schema:
type: integer
description: ID of the delivery.
responses:
'200':
description: Webhook delivery details
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookDelivery'
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Not found
/company/webhooks/{webhook_id}/webhook_deliveries/{id}/retry_delivery:
post:
summary: Retry a failed delivery
tags:
- Webhook Deliveries
description: "Re-queues a failed delivery for immediate retry. The delivery's `status` is reset to `pending` and `attempts` is reset to `0`. \n\n Returns `422` if the subscription's `max_retries` limit has already been reached. \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/webhooks/{webhook_id}/webhook_deliveries/{id}/retry_delivery`"
parameters:
- $ref: '#/components/parameters/AccountId'
- name: webhook_id
in: path
required: true
schema:
type: integer
description: ID of the webhook subscription.
- name: id
in: path
required: true
schema:
type: integer
description: ID of the delivery to retry.
responses:
'200':
description: Delivery re-queued
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookDelivery'
'401':
description: Unauthorized
'403':
description: Forbidden
'404':
description: Not found
'422':
description: Max retries already reached
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
Error:
type: object
properties:
message:
type: string
example: Invalid user type
code:
type: string
example: forbidden
WebhookDelivery:
type: object
properties:
id:
type: integer
description: Unique ID of the delivery record.
event_id:
type: string
description: Unique ID of the source event that triggered this delivery.
event_type:
type: string
description: Event type string (e.g. `referral.created`).
action:
type: string
description: The CRUD action that triggered the event (e.g. `created`, `updated`, `deleted`).
entity_type:
type: string
description: The type of entity that changed (e.g. `Referral`, `Commission`).
entity_id:
type: integer
nullable: true
description: The ID of the entity that changed.
status:
type: string
enum:
- pending
- delivered
- retrying
- failed
description: Current delivery status. `pending` — queued for delivery. `delivered` — endpoint responded with 2xx. `retrying` — delivery failed, waiting for next retry attempt. `failed` — all retry attempts exhausted.
attempts:
type: integer
description: Number of delivery attempts made so far.
last_error:
type: string
nullable: true
description: Error message from the most recent failed attempt (timeout, connection error, non-2xx response). `null` on successful delivery.
response_code:
type: integer
nullable: true
description: HTTP status code returned by your endpoint on the last attempt.
response_body:
type: string
nullable: true
description: Response body returned by your endpoint on the last attempt (truncated if large).
object_changes:
type: object
nullable: true
description: For `updated` events — a map of changed fields to `[old_value, new_value]` pairs.
example:
state:
- lead
- customer
payload:
type: object
description: The exact JSON payload that was (or will be) sent to your endpoint.
created_at:
type: string
format: date-time
description: ISO 8601 timestamp of when this delivery record was created.
delivered_at:
type: string
format: date-time
nullable: true
description: ISO 8601 timestamp of when the delivery was acknowledged by your endpoint. `null` if not yet delivered.
parameters:
AccountId:
name: Account-ID
in: header
required: true
description: Account ID. You can find your Account ID on Your FirstPromoter Dashboard. Navigate to Settings → Integrations
schema:
type: string
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: API key passed as Bearer token