openapi: 3.0.1
info:
title: FirstPromoter Admin Commissions 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: Commissions
paths:
/company/commissions:
get:
summary: Get all commissions
description: "With this endpoint you can list all rewards and commissions assigned to a promotion, promoter, campaign or entire account using the API. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/commissions`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
- name: q
in: query
description: Search params. Searches by event_id, referral.email, referral.uid
schema:
type: string
- name: ids[]
in: query
description: Array of commission ids to get
required: false
schema:
type: array
items:
type: integer
- name: filters
in: query
schema:
$ref: '#/components/schemas/CommissionFilters'
- name: sorting
in: query
schema:
$ref: '#/components/schemas/CommissionSorting'
responses:
'200':
description: Successfully retrieved commissions
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Commission'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
summary: Create a commission
description: "With this endpoint you can create a commission. \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommissionCreate'
responses:
'200':
description: Successfully retrieved commissions
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Commission'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/{id}:
put:
summary: Update a commission
description: "With this endpoint you can update a commission. \n **HTTP Request**
`PUT https://api.firstpromoter.com/api/v2/company/commissions/{id}`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
description: Id of the commission
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CommissionUpdate'
responses:
'200':
description: Commission updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Commission'
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: Commission not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/approve:
post:
summary: Approve commissions
description: "With this endpoint you can approve commissions. \n If there are more than __5__ ids on the __ids__ param/field, the action will be processed asynchronously. The response for the batch status will most likely be `in_progress`. The available statuses are `pending`, `in_progress`, `completed`, `failed` and `stopped` \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions/approve`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionRequest'
responses:
'200':
description: Operation completed successfully
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- completed
description: Status of the batch operation (always completed for synchronous operations)
'202':
description: Batch operation accepted and processing
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- pending
description: Status of the batch operation (initially pending for asynchronous operations)
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/deny:
post:
summary: Deny commissions
description: "With this endpoint you can deny commissions. \n If there are more than __5__ ids on the __ids__ param/field, the action will be processed asynchronously. The response for the batch status will most likely be `in_progress`. The available statuses are `pending`, `in_progress`, `completed`, `failed` and `stopped` \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions/deny`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionRequest'
responses:
'200':
description: Operation completed successfully
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- completed
description: Status of the batch operation (always completed for synchronous operations)
'202':
description: Batch operation accepted and processing
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- pending
description: Status of the batch operation (initially pending for asynchronous operations)
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/mark_fulfilled:
post:
summary: Mark nonmonetary commissions as fulfilled
description: "With this endpoint you can mark nonmonetary commissions as fulfilled. \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions/mark_fulfilled`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionRequest'
responses:
'200':
description: Operation completed successfully
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- completed
description: Status of the batch operation (always completed for synchronous operations)
'202':
description: Batch operation accepted and processing
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- pending
description: Status of the batch operation (initially pending for asynchronous operations)
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/mark_unfulfilled:
post:
summary: Mark nonmonetary commissions as unfulfilled
description: "With this endpoint you can mark nonmonetary commissions as unfulfilled. \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions/mark_unfulfilled`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionRequest'
responses:
'200':
description: Operation completed successfully
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- completed
description: Status of the batch operation (always completed for synchronous operations)
'202':
description: Batch operation accepted and processing
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- pending
description: Status of the batch operation (initially pending for asynchronous operations)
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/destroy:
delete:
summary: Delete commissions
description: "With this endpoint you can delete commissions. \n **HTTP Request**
`DELETE https://api.firstpromoter.com/api/v2/company/commissions/destroy`"
tags:
- Commissions
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionRequest'
responses:
'200':
description: Operation completed successfully
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- completed
description: Status of the batch operation (always completed for synchronous operations)
'202':
description: Batch operation accepted and processing
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/BatchOperationResponse'
- properties:
status:
type: string
enum:
- pending
description: Status of the batch operation (initially pending for asynchronous operations)
'401':
description: Unauthorized
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'422':
description: Invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/company/commissions/generate_payouts:
post:
summary: Generate payouts for commissions
description: "With this endpoint you can generate payouts for commissions. \n If there are more than __5__ ids on the __ids__ param/field, the action will be processed asynchronously. The response for the batch status will most likely be `in_progress`. The available statuses are `pending`, `in_progress`, `completed`, `failed` and `stopped` \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/commissions/generate_payouts`"
tags:
- Commissions
operationId: generatePayouts
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
type: array
items:
type: integer
description: Commission IDs to generate payouts for. If there are more than __5__ ids on the __ids__ param/field, the action will be processed asynchronously. The response for the batch status will most likely be `in_progress`. The available statuses are `pending`, `in_progress`, `completed`, `failed` and `stopped`.
required:
- ids
responses:
'200':
description: Successful operation
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: Operation ID
status:
type: string
description: Status of the operation
total:
type: integer
description: Total number of commissions
selected_total:
type: integer
description: Number of selected commissions
processed_count:
type: integer
description: Number of processed commissions
failed_count:
type: integer
description: Number of failed operations
action_label:
type: string
description: Action identifier
created_at:
type: string
format: date-time
description: Creation timestamp
updated_at:
type: string
format: date-time
description: Last update timestamp
meta:
type: object
description: Additional metadata
progress:
type: number
description: Progress indicator (0-1)
processing_errors:
type: array
description: List of processing errors
'401':
description: Unauthorized - Missing or invalid bearer token
components:
schemas:
CommissionSorting:
type: object
properties:
sale_amount:
type: string
enum:
- asc
- desc
description: The sort by sale direction
amount:
type: string
enum:
- asc
- desc
description: The sort by amount direction
created_at:
type: string
enum:
- asc
- desc
description: The sort by created_at direction
referral:
type: string
enum:
- asc
- desc
description: The sort by referral direction
ErrorResponse:
type: object
properties:
message:
type: string
description: Error message
code:
type: string
description: Error code
CommissionUpdate:
type: object
properties:
internal_note:
type: string
description: Internal note visible only by the team
external_note:
type: string
description: External note visible by the promoter
CommissionCreate:
oneOf:
- title: Sale Commission
type: object
required:
- commission_type
- referral_id
- sale_amount
properties:
commission_type:
type: string
enum:
- sale
description: The commission type
referral_id:
type: integer
description: Referral id. Required for sale commission type.
plan_id:
type: integer
description: One of the items id from price_ids
sale_amount:
type: integer
description: Sale amount in cents. Required for sale commission type.
event_id:
type: string
description: The ID of the event that generated the sale from billing provider
event_date:
type: string
format: date
description: The date of the event that generated the sale
internal_note:
type: string
description: Internal note visible only by the team
unit:
type: string
enum:
- cash
- credits
- points
- free_months
- mon_discount
- discount_per
description: Set the reward unit type
notify_promoter:
type: boolean
description: If true a notification email is sent to promoter if enabled on Emails section
billing_period:
type: string
enum:
- monthly
- yearly
- one_time
description: The billing period of the event that generated the sale
- title: Custom Commission
type: object
required:
- commission_type
- promoter_campaign_id
- amount
properties:
commission_type:
type: string
enum:
- custom
description: The commission type
promoter_campaign_id:
type: integer
description: PromoterCampaign id. Required for custom commission type. This ID is not the promoter’s ID or the campaign’s ID. It’s the linking record that defines the promoter’s participation in that campaign. You can find this id in each object in the promoter_campaigns array when you get the details of the promoter.
amount:
type: integer
description: Commission amount in cents. Required for custom commission type.
event_id:
type: string
description: The ID of the event that generated the sale from billing provider
event_date:
type: string
format: date
description: The date of the event that generated the sale
internal_note:
type: string
description: Internal note visible only by the team
unit:
type: string
enum:
- cash
- credits
- points
- free_months
- mon_discount
- discount_per
description: Set the reward unit type
notify_promoter:
type: boolean
description: If true a notification email is sent to promoter if enabled on Emails section
billing_period:
type: string
enum:
- monthly
- yearly
- one_time
description: The billing period of the event that generated the sale
discriminator:
propertyName: commission_type
mapping:
sale: '#/components/schemas/CommissionCreate/oneOf/0'
custom: '#/components/schemas/CommissionCreate/oneOf/1'
BatchOperationResponse:
type: object
properties:
id:
type: integer
description: Batch ID
status:
type: string
enum:
- completed
- pending
- in_progress
- failed
- stopped
description: Status of the batch operation
total:
type: integer
description: Total number of items
selected_total:
type: integer
description: Total number of selected items
processed_count:
type: integer
description: Number of processed items
failed_count:
type: integer
description: Number of failed operations
action_label:
type: string
description: Label for the action
created_at:
type: string
format: date-time
description: Creation date of the batch operation
updated_at:
type: string
format: date-time
description: Last update date of the batch operation
meta:
type: object
description: Additional metadata
progress:
type: integer
description: Progress of the batch operation
processing_errors:
type: array
items:
type: string
description: List of processing errors if any
Commission:
type: object
properties:
id:
type: integer
description: Commission ID
status:
type: string
enum:
- pending
- approved
- denied
description: Current status of the commission
metadata:
type: object
description: Additional metadata about the commission
is_self_referral:
type: boolean
nullable: true
description: Whether this is a self-referral
commission_type:
type: string
enum:
- sale
- custom
description: Type of commission
created_by_user_email:
type: string
nullable: true
description: Email of the user who created the commission
created_by_user_at:
type: string
format: date-time
nullable: true
description: Timestamp when the user created the commission
sale_amount:
type: integer
description: Amount of the sale
original_sale_amount:
type: integer
description: Original amount of the sale
original_sale_currency:
type: string
nullable: true
description: Currency of the original sale
event_id:
type: string
nullable: true
description: ID of the event that generated the commission
plan_id:
type: string
nullable: true
description: Plan ID associated with the commission
tier:
type: integer
description: Reward tier
internal_note:
type: string
nullable: true
description: Internal note visible only to the team
external_note:
type: string
nullable: true
description: External note visible to the promoter
unit:
type: string
enum:
- cash
- credits
- points
- free_months
- mon_discount
- discount_per
description: Unit type for the reward
fraud_check:
type: string
nullable: true
enum:
- no_suspicion
- same_ip_suspicion
- same_promoter_email
- ad_source
description: Result of fraud check
amount:
type: integer
description: Commission amount
is_paid:
type: boolean
description: Whether the commission has been paid
is_split:
type: boolean
description: Whether the commission is split among multiple promoters
created_at:
type: string
format: date-time
description: Creation timestamp
status_updated_at:
type: string
format: date-time
nullable: true
description: Last status update timestamp
promoter_campaign:
type: object
properties:
id:
type: integer
description: Promoter campaign ID
campaign_id:
type: integer
description: Campaign ID
promoter_id:
type: integer
description: Promoter ID
created_at:
type: string
format: date-time
description: Creation timestamp
promoter:
type: object
properties:
id:
type: integer
description: Promoter ID
email:
type: string
description: Promoter email
name:
type: string
description: Promoter name
campaign:
type: object
properties:
id:
type: integer
description: Campaign ID
name:
type: string
description: Campaign name
color:
type: string
nullable: true
description: Campaign color
referral:
type: object
nullable: true
properties:
id:
type: integer
description: Referral ID
email:
type: string
description: Referral email
uid:
type: string
description: Referral UID
reward:
type: object
properties:
id:
type: integer
description: Reward ID
name:
type: string
description: Reward name
split_details:
type: object
nullable: true
description: Commission split details from the associated referral, when the referral is shared between promoters
BatchActionRequest:
type: object
properties:
ids:
type: array
items:
type: integer
description: Array of commission Ids. If there are more than __5__ ids on this param/field, the action will be processed asynchronously. The response for the batch status will most likely be `in_progress`. The available statuses are `pending`, `in_progress`, `completed`, `failed` and `stopped`
CommissionFilters:
type: object
properties:
status:
type: string
enum:
- pending
- approved
- denied
paid:
type: string
enum:
- 'yes'
- 'no'
description: Paid filter for monetary commissions
fulfilled:
type: string
enum:
- 'yes'
- 'no'
description: Fulfilled filter for non-monetary commissions
sale_amount:
type: object
properties:
from:
type: integer
description: Sale amount from
to:
type: integer
description: Sale amount to
amount:
type: object
properties:
from:
type: integer
description: Amount from
to:
type: integer
description: Amount to
created_at:
type: object
properties:
from:
type: string
format: date
description: created_at start date
to:
type: string
format: date
description: created_at end date
campaign_id:
oneOf:
- type: integer
- type: array
items:
type: integer
description: Campaign ids. Can be Integer or Array of Integers
payout_id:
oneOf:
- type: integer
- type: array
items:
type: integer
description: Payout ids. Can be Integer or Array of Integers
due_period:
type: string
enum:
- next
- overdue
- custom
description: Due period filter
promoter_id:
type: integer
description: Promoter id
first_commission:
type: boolean
description: First commission
refunded:
type: boolean
description: Refunded reward
fraud_check:
type: string
enum:
- no_suspicion
- same_ip_suspicion
- same_promoter_email
- ad_source
description: Referral fraud check (suspicion). Array accepted
plan_id:
oneOf:
- type: integer
- type: array
items:
type: integer
description: Plan id
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