openapi: 3.0.1
info:
title: FirstPromoter Admin Commissions Company 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: Company
paths:
/company/batch_processes:
get:
summary: List in progress batch processes.
description: "List batch processes that are in progress \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/batch_processes`"
operationId: listBatchProcesses
parameters:
- $ref: '#/components/parameters/AccountId'
- in: query
name: filters[status]
schema:
oneOf:
- type: string
enum:
- pending
- in_progress
- completed
- failed
- stopped
- type: array
items:
type: string
enum:
- pending
- in_progress
- completed
- failed
- stopped
description: Filter by status (array or string)
required: false
responses:
'200':
description: Successfully retrieved batch processes
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BatchProcess'
'401':
description: Unauthenticated or missing bearer token
'403':
description: Forbidden - invalid user type or insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/batch_processes/{id}:
get:
summary: Show batch process
description: "Show details of a specific batch process \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/batch_processes/{id}`"
operationId: getBatchProcess
parameters:
- $ref: '#/components/parameters/AccountId'
- in: path
name: id
schema:
type: integer
required: true
description: Batch process id
responses:
'200':
description: Successfully retrieved batch process
content:
application/json:
schema:
$ref: '#/components/schemas/BatchProcess'
'401':
description: Unauthenticated or missing bearer token
'403':
description: Forbidden - invalid user type or insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/batch_processes/progress:
get:
summary: Show progress
description: "Show progress of batch process. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/batch_processes/progress`"
operationId: getBatchProcessProgress
parameters:
- $ref: '#/components/parameters/AccountId'
- in: query
name: filters[status]
schema:
oneOf:
- type: string
enum:
- pending
- in_progress
- completed
- failed
- stopped
- type: array
items:
type: string
enum:
- pending
- in_progress
- completed
- failed
- stopped
description: Filter by status (array or string)
required: false
responses:
'200':
description: Successfully retrieved batch process progress
content:
application/json:
schema:
type: object
additionalProperties:
type: integer
example:
'32': 0
'31': 0
'30': 0
'401':
description: Unauthenticated or missing bearer token
'403':
description: Forbidden - invalid user type or insufficient permissions
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts:
get:
summary: Get all payouts
description: "With this endpoint you can list all payouts. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/payouts`"
operationId: getAdminPayouts
parameters:
- $ref: '#/components/parameters/AccountId'
- name: q
in: query
description: Search params. Searches by 'promoter.profile.first_name`, `promoter.profile.last_name`, `promoter.user.email`
required: false
schema:
type: string
- name: ids[]
in: query
description: Array of payout ids to get
required: false
schema:
type: array
items:
type: integer
- name: filters[status]
in: query
description: Filter by status
required: false
schema:
type: string
enum:
- pending
- completed
- failed
- processing
- cancelled
- name: filters[campaign_id]
in: query
description: Campaign ids. Can be Integer or Array of Integers
required: false
schema:
oneOf:
- type: integer
- type: array
items:
type: integer
- name: filters[payments_batch_id]
in: query
description: Payment batches ids. Can be Integer or Array of Integers
required: false
schema:
oneOf:
- type: integer
- type: array
items:
type: integer
- name: filters[due_period]
in: query
description: Due period
required: false
schema:
type: string
enum:
- next
- overdue
- custom
- name: filters[period_start][from]
in: query
description: period_start starting from date
required: false
schema:
type: string
format: date
- name: filters[period_start][to]
in: query
description: period_start end at date
required: false
schema:
type: string
format: date
- name: filters[period_end][from]
in: query
description: period_end starting from date
required: false
schema:
type: string
format: date
- name: filters[period_end][to]
in: query
description: period_end end at date
required: false
schema:
type: string
format: date
- name: filters[payout_method]
in: query
description: Payout method
required: false
schema:
type: string
enum:
- paypal
- bank
- wise
- crypto
- custom
- dots
- not_set
- name: filters[promoter_id]
in: query
description: Promoter id
required: false
schema:
type: integer
- name: filters[only_payable]
in: query
description: Only payable payouts
required: false
schema:
type: boolean
- name: filters[group_ref]
in: query
description: Group reference
required: false
schema:
type: string
- name: filters[fraud_suspicions]
in: query
description: Fraud suspicions. Multiple values can be passed as an array. Send ['no_suspicion'] to filter promoters with no fraud suspicions
required: false
schema:
type: array
items:
type: string
enum:
- same_ip_suspicion
- same_promoter_email
- ad_source
- no_suspicion
- name: sorting[amount]
in: query
description: The sort by amount direction
required: false
schema:
type: string
enum:
- asc
- desc
- name: sorting[period_start]
in: query
description: Period start
required: false
schema:
type: string
enum:
- asc
- desc
- name: sorting[period_end]
in: query
description: Period end
required: false
schema:
type: string
enum:
- asc
- desc
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Payout'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/stats:
get:
summary: Get payout stats
description: "This endpoint returns statistics about payouts. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/payouts/stats`"
operationId: getAdminPayoutStats
parameters:
- $ref: '#/components/parameters/AccountId'
- name: stats_by[paid_period]
in: query
description: Shows the stats by payout period only for paid payouts
required: false
schema:
type: boolean
- name: stats_by[status]
in: query
description: Shows the stats by status (pending, failed, processing, completed)
required: false
schema:
type: boolean
- name: stats_by[payout_method]
in: query
description: Shows the stats by payout method
required: false
schema:
type: boolean
- name: filters[status]
in: query
description: Filter by status
required: false
schema:
type: string
enum:
- pending
- completed
- failed
- processing
- cancelled
- name: filters[campaign_id]
in: query
description: Campaign ids. Can be Integer or Array of Integers
required: false
schema:
oneOf:
- type: integer
- type: array
items:
type: integer
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayoutStats'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/due_stats:
get:
summary: Get due payout stats
description: "This endpoint returns statistics about due payouts. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/payouts/due_stats`"
operationId: getAdminPayoutDueStats
parameters:
- $ref: '#/components/parameters/AccountId'
- name: q
in: query
description: Search params. Searches by 'promoter.profile.first_name`, `promoter.profile.last_name`, `promoter.user.email`
required: false
schema:
type: string
- name: filters[status]
in: query
description: Filter by status
required: false
schema:
type: string
enum:
- pending
- completed
- failed
- processing
- cancelled
- name: filters[campaign_id]
in: query
description: Campaign ids. Can be Integer or Array of Integers
required: false
schema:
oneOf:
- type: integer
- type: array
items:
type: integer
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayoutDueStats'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/group_by_promoters:
get:
summary: Get all payouts grouped by promoters
description: "This endpoint returns all payouts but grouped by promoters. \n **HTTP Request**
`GET https://api.firstpromoter.com/api/v2/company/payouts/group_by_promoters`"
operationId: getAdminPayoutsGroupedByPromoters
parameters:
- $ref: '#/components/parameters/AccountId'
- name: q
in: query
description: Search params. Searches by 'promoter.profile.first_name`, `promoter.profile.last_name`, `promoter.user.email`
required: false
schema:
type: string
- name: filters[status]
in: query
description: Filter by status
required: false
schema:
type: string
enum:
- pending
- completed
- failed
- processing
- cancelled
- name: filters[campaign_id]
in: query
description: Campaign ids. Can be Integer or Array of Integers
required: false
schema:
oneOf:
- type: integer
- type: array
items:
type: integer
- name: include_payout_method_details
in: query
description: Set it true to include the payout_method_details
required: false
schema:
type: boolean
- name: filters[min_payment]
in: query
description: Filters payouts by the minimum payment amount possible
required: false
schema:
type: integer
- name: filters[invoiceable]
in: query
description: Filters payouts by invoiceable
required: false
schema:
type: string
enum:
- 'true'
- 'false'
- not_set
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/PayoutsGroupedByPromoters'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/create_payments_batch:
post:
summary: Create payments batch
description: "This endpoint creates a new payments batch. \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/payouts/create_payments_batch`"
operationId: createPaymentsBatch
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
method:
type: string
enum:
- paypal
- bank
- wise
- crypto
- dots
description: Payment method
required:
- method
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentsBatch'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/mark_as_paid:
post:
summary: Mark payouts as paid
description: "Marks selected payouts as paid \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/payouts/mark_as_paid`"
operationId: markPayoutsAsPaid
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
$ref: '#/components/schemas/Ids'
required:
- ids
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'202':
description: Accepted (Processing in background)
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/mark_as_unpaid:
post:
summary: Mark payouts as unpaid
description: "Marks selected payouts as unpaid \n **HTTP Request**
`POST https://api.firstpromoter.com/api/v2/company/payouts/mark_as_unpaid`"
operationId: markPayoutsAsUnpaid
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
$ref: '#/components/schemas/Ids'
required:
- ids
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'202':
description: Accepted (Processing in background)
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
/company/payouts/destroy:
delete:
summary: Delete payouts
description: "Deletes selected payouts \n **HTTP Request**
`DELETE https://api.firstpromoter.com/api/v2/company/payouts/destroy`"
operationId: deletePayouts
parameters:
- $ref: '#/components/parameters/AccountId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
ids:
$ref: '#/components/schemas/Ids'
required:
- ids
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'202':
description: Accepted (Processing in background)
content:
application/json:
schema:
$ref: '#/components/schemas/BatchActionResult'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Company
components:
schemas:
BatchProcess:
type: object
properties:
id:
type: integer
example: 8
status:
type: string
enum:
- pending
- in_progress
- completed
- failed
- stopped
example: stopped
total:
type: integer
example: 5
selected_total:
type: integer
example: 5
processed_count:
type: integer
example: 0
failed_count:
type: integer
example: 0
action_label:
type: string
example: referral/delete
created_at:
type: string
format: date-time
example: '2025-03-26T15:15:34.908Z'
updated_at:
type: string
format: date-time
example: '2025-03-26T15:15:34.908Z'
meta:
type: object
nullable: true
progress:
type: integer
example: 0
processing_errors:
type: array
items:
type: string
example: []
BatchActionResult:
type: object
properties:
data:
type: object
properties:
id:
type: integer
description: ID of the batch action
status:
type: string
enum:
- pending
- completed
- failed
description: Status of the batch action
total:
type: integer
description: Total number of items
selected_total:
type: integer
description: Number of selected items
processed_count:
type: integer
description: Number of processed items
failed_count:
type: integer
description: Number of failed items
action_label:
type: string
description: Label of the action
created_at:
type: string
format: date-time
description: When the action was created
updated_at:
type: string
format: date-time
description: When the action was last updated
meta:
type: object
description: Meta information about the action
progress:
type: integer
description: Progress of the action (0-100)
processing_errors:
type: array
items:
type: object
description: List of processing errors
meta:
type: object
properties:
total:
type: number
description: Total amount
promoters_count:
type: integer
description: Count of promoters
total_incl_tax:
type: number
description: Total amount including tax
all_promoters_count:
type: integer
description: Count of all promoters
PayoutDueStats:
type: object
properties:
meta:
type: object
properties:
net_payout_days:
type: integer
description: Number of days for net payout
payout_cycle:
type: string
description: Payout cycle (e.g., monthly)
min_payment:
type: integer
description: Minimum payment amount
min_paying_customers:
type: integer
description: Minimum number of paying customers
terms_description:
type: string
description: Description of payment terms
selected_payout_methods:
type: array
items:
type: string
description: List of selected payout methods
payout_method_options:
type: object
description: Options for payout methods
managed_payouts:
type: boolean
description: Whether payouts are managed by us (auto-payouts)
data:
type: object
properties:
next:
type: object
properties:
promoters_count:
type: integer
description: Count of promoters
amounts:
type: object
additionalProperties:
type: number
description: Amounts by currency or unit
total_incl_tax:
type: number
description: Total amount including tax
due_date:
type: string
format: date
description: Due date for the next payout
period_end:
type: string
format: date
description: End date of the period
overdue:
type: object
properties:
promoters_count:
type: integer
description: Count of promoters
amounts:
type: object
additionalProperties:
type: number
description: Amounts by currency or unit
total_incl_tax:
type: number
description: Total amount including tax
due_date:
type: string
format: date
description: Due date for overdue payout
period_end:
type: string
format: date
description: End date of the period
custom:
type: object
properties:
promoters_count:
type: integer
description: Count of promoters
amounts:
type: object
additionalProperties:
type: number
description: Amounts by currency or unit
total_incl_tax:
type: number
description: Total amount including tax
PaymentsBatch:
type: object
properties:
data:
type: object
properties:
id:
type: integer
description: ID of the payments batch
status:
type: string
enum:
- awaiting_confirmation
- pending
- processing
- completed
- failed
description: Status of the payments batch
ext_reference:
type: string
description: External reference
ext_id:
type: string
description: External ID
scheduled_at:
type: string
format: date-time
description: When the batch is scheduled
processing_started_at:
type: string
format: date-time
description: When processing started
completed_at:
type: string
format: date-time
description: When the batch was completed
is_payable:
type: boolean
description: Whether the batch is payable
is_retriable:
type: boolean
description: Whether the batch can be retried
is_payment_otp_required:
type: boolean
description: Whether OTP is required for payment
total:
type: number
description: Total amount
promoters_count:
type: integer
description: Count of promoters
error:
type: string
description: Error message if the batch failed
meta:
type: object
properties:
failed:
type: array
items:
type: object
description: List of failed items
Ids:
type: array
items:
type: integer
description: Array of Payout IDs
Payout:
type: object
properties:
id:
type: integer
description: Unique identifier for the payout
status:
type: string
enum:
- pending
- completed
- failed
- processing
- cancelled
description: Status of the payout
amount:
type: number
format: float
description: Amount of the payout
payments_batch_id:
type: integer
description: ID of the payments batch
tax_rate:
type: number
format: float
description: Tax rate applied to the payout
unit:
type: string
description: Unit of the payout (e.g., cash)
period_start:
type: string
format: date-time
description: Start date of the period
period_end:
type: string
format: date-time
description: End date of the period
paid_at:
type: string
format: date-time
description: Date when the payout was paid
processing_started_at:
type: string
format: date-time
description: Date when the payout processing started
failed_at:
type: string
format: date-time
description: Date when the payout failed
error:
type: string
description: Error message if the payout failed
total_incl_tax:
type: number
format: float
description: Total amount including tax
created_at:
type: string
format: date-time
description: Date when the payout was created
payout_method:
type: object
properties:
id:
type: integer
description: ID of the payout method
method:
type: string
description: Payout method name
date_added:
type: string
format: date-time
description: Date when the payout method was added
is_disabled:
type: boolean
description: Whether the payout method is disabled
meta:
type: object
description: Additional meta information
is_selected:
type: boolean
description: Whether the payout method is selected
details:
type: object
description: Details about the payout method
managed_payouts:
type: boolean
description: Whether payouts are managed by us (auto-payouts)
promoter:
type: object
properties:
id:
type: integer
description: ID of the promoter
email:
type: string
description: Email of the promoter
name:
type: string
description: Name of the promoter
campaign:
type: object
properties:
id:
type: integer
description: ID of the campaign
name:
type: string
description: Name of the campaign
color:
type: string
description: Color of the campaign
PayoutsGroupedByPromoters:
type: object
properties:
data:
type: array
items:
type: object
properties:
promoter:
type: object
properties:
id:
type: integer
description: ID of the promoter
email:
type: string
description: Email of the promoter
name:
type: string
description: Name of the promoter
invoice_details_status:
type: string
description: Status of invoice details
fraud_suspicions:
type: array
items:
type: string
description: List of fraud suspicions
profile:
type: object
properties:
invoice_details_validation_errors:
type: object
description: Validation errors for invoice details
payout_method:
type: object
properties:
id:
type: integer
description: ID of the payout method
method:
type: string
description: Payout method name
date_added:
type: string
format: date-time
description: Date when the payout method was added
is_disabled:
type: boolean
description: Whether the payout method is disabled
meta:
type: object
description: Additional meta information
is_selected:
type: boolean
description: Whether the payout method is selected
details:
type: object
description: Details about the payout method
managed_payouts:
type: boolean
description: Whether payouts are managed by us (auto-payouts)
payouts:
type: array
items:
$ref: '#/components/schemas/Payout'
is_amount_payable:
type: boolean
description: Whether the amount is payable
payout_ids:
type: array
items:
type: integer
description: List of payout IDs
amount:
type: number
description: Total amount
total_incl_tax:
type: number
description: Total amount including tax
meta:
type: object
properties:
total:
type: number
description: Total amount
promoters_count:
type: integer
description: Count of promoters
total_incl_tax:
type: number
description: Total amount including tax
due_date:
type: string
format: date
description: Due date
period_end:
type: string
format: date
description: End date of the period
Error:
type: object
properties:
message:
type: string
example: Invalid user type
code:
type: string
example: forbidden
PayoutStats:
type: object
properties:
meta:
type: object
properties:
net_payout_days:
type: integer
description: Number of days for net payout
payout_cycle:
type: string
description: Payout cycle (e.g., monthly)
min_payment:
type: integer
description: Minimum payment amount
min_paying_customers:
type: integer
description: Minimum number of paying customers
terms_description:
type: string
description: Description of payment terms
selected_payout_methods:
type: array
items:
type: string
description: List of selected payout methods
payout_method_options:
type: object
description: Options for payout methods
managed_payouts:
type: boolean
description: Whether payouts are managed by us (auto-payouts)
data:
type: object
properties:
by_paid_period:
type: array
items:
type: object
properties:
period_start:
type: string
format: date-time
description: Start date of the period
period_end:
type: string
format: date-time
description: End date of the period
promoters_count:
type: integer
description: Count of promoters
amounts:
type: object
additionalProperties:
type: number
description: Amounts by currency or unit
total_incl_tax:
type: number
description: Total amount including tax
by_status:
type: object
additionalProperties:
type: object
properties:
amounts:
type: object
additionalProperties:
type: number
total_incl_tax:
type: number
promoters_count:
type: integer
by_payout_method:
type: object
additionalProperties:
type: object
properties:
amounts:
type: object
additionalProperties:
type: number
total_incl_tax:
type: number
promoters_count:
type: integer
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