Dub Commissions API
The Commissions API from Dub — 3 operation(s) for commissions.
The Commissions API from Dub — 3 operation(s) for commissions.
openapi: 3.0.3
info:
title: Dub Analytics Commissions API
description: Dub is the modern link attribution platform for short links, conversion tracking, and affiliate programs.
version: 0.0.1
contact:
name: Dub Support
email: support@dub.co
url: https://dub.co/support
license:
name: AGPL-3.0 license
url: https://github.com/dubinc/dub/blob/main/LICENSE.md
servers:
- url: https://api.dub.co
description: Production API
tags:
- name: Commissions
paths:
/commissions:
post:
operationId: createCommission
x-speakeasy-name-override: create
summary: Create commission
description: Create one or more commissions (custom, lead or sale) for a partner. Commission creation is processed asynchronously. Use the List Commissions endpoint or webhooks to be notified when the commission is created.
tags:
- Commissions
security:
- token: []
requestBody:
content:
application/json:
schema:
oneOf:
- type: object
properties:
type:
type: string
enum:
- custom
partnerId:
type: string
description: The ID of the partner to create the commission for.
amount:
description: The commission amount in cents.
type: number
date:
description: If not provided, the current date will be used.
nullable: true
type: string
description:
description: The description of the commission.
nullable: true
type: string
maxLength: 190
required:
- type
- partnerId
- amount
- type: object
properties:
type:
type: string
enum:
- lead
partnerId:
type: string
description: The ID of the partner to create the commission for.
customerId:
description: The customer ID to associate the commission with. Useful if the customer was already created in a prior operation and you want to associate the commission with it.
nullable: true
type: string
customer:
description: The full customer object to associate the commission with. Useful for creating the customer on demand.
nullable: true
type: object
properties:
email:
description: The customer's email address.
nullable: true
type: string
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
name:
description: The customer's name. If not provided, the email address will be used, and if email is not provided, a random name will be generated.
nullable: true
type: string
avatar:
description: The customer's avatar URL. If not provided, a random avatar will be generated.
nullable: true
type: string
format: uri
externalId:
type: string
description: The customer's unique identifier your database. This is useful for associating subsequent conversion events from Dub's API to your internal systems.
stripeCustomerId:
description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer.
nullable: true
type: string
country:
type: string
description: The customer's country in ISO 3166-1 alpha-2 format. Updating this field will only affect the customer's country in Dub's system (and has no effect on existing conversion events).
required:
- externalId
- country
linkId:
description: The partner link ID to associate the commission with. If not provided, default to the link with the most revenue.
nullable: true
type: string
leadEventDate:
description: The date and time of the lead event. If not provided, defaults to the current date and time.
nullable: true
type: string
leadEventName:
default: Sign up
description: The name of the lead event. If not provided, defaults to 'Sign up'.
nullable: true
type: string
required:
- type
- partnerId
- type: object
properties:
type:
type: string
enum:
- sale
partnerId:
type: string
description: The ID of the partner to create the commission for.
customerId:
description: The customer ID to associate the commission with. Useful if the customer was already created in a prior operation and you want to associate the commission with it.
nullable: true
type: string
customer:
description: The full customer object to associate the commission with. Useful for creating the customer on demand.
nullable: true
type: object
properties:
email:
description: The customer's email address.
nullable: true
type: string
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
name:
description: The customer's name. If not provided, the email address will be used, and if email is not provided, a random name will be generated.
nullable: true
type: string
avatar:
description: The customer's avatar URL. If not provided, a random avatar will be generated.
nullable: true
type: string
format: uri
externalId:
type: string
description: The customer's unique identifier your database. This is useful for associating subsequent conversion events from Dub's API to your internal systems.
stripeCustomerId:
description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer.
nullable: true
type: string
country:
type: string
description: The customer's country in ISO 3166-1 alpha-2 format. Updating this field will only affect the customer's country in Dub's system (and has no effect on existing conversion events).
required:
- externalId
- country
linkId:
description: The partner link ID to associate the commission with. If not provided, default to the link with the most revenue.
nullable: true
type: string
importStripeInvoices:
default: false
description: When `true`, import all unimported paid Stripe invoices for the customer and create a commission for each. When `false`, create a single manual sale event using `saleAmount`.
nullable: true
type: boolean
saleAmount:
description: Required when `importStripeInvoices` is `false`. The sale amount in cents for the manual sale event. Ignored when importing from Stripe.
nullable: true
type: number
saleEventDate:
description: Only used when `importStripeInvoices` is `false`. The date of the manual sale event. Defaults to the current date and time if not provided.
nullable: true
type: string
invoiceId:
description: Only used when `importStripeInvoices` is `false`. An optional invoice ID to attach to the generated sale event and commission entry for deduplication.
nullable: true
type: string
productId:
description: Only used when `importStripeInvoices` is `false`. An optional product ID stored on the sale event metadata – will also impact commission earnings calculation (if a `Sale` `Product ID` modifier is set).
nullable: true
type: string
required:
- type
- partnerId
type: object
responses:
'202':
description: The request was accepted and commission creation was queued.
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
message:
type: string
required:
- success
- message
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
$ref: '#/components/responses/409'
'410':
$ref: '#/components/responses/410'
'422':
$ref: '#/components/responses/422'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
get:
operationId: listCommissions
x-speakeasy-name-override: list
x-speakeasy-pagination:
type: cursor
inputs:
- name: startingAfter
in: parameters
type: cursor
outputs:
nextCursor: $[-1].id
summary: List all commissions
description: Retrieve a paginated list of commissions for your partner program.
tags:
- Commissions
security:
- token: []
parameters:
- in: query
name: type
schema:
description: 'Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.'
type: string
enum:
- click
- lead
- sale
- referral
- custom
description: 'Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.'
- in: query
name: customerId
schema:
description: Filter the list of commissions by the associated customer.
type: string
description: Filter the list of commissions by the associated customer.
- in: query
name: payoutId
schema:
description: Filter the list of commissions by the associated payout.
type: string
description: Filter the list of commissions by the associated payout.
- in: query
name: partnerId
schema:
description: 'Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.'
type: string
description: 'Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.'
- in: query
name: tenantId
schema:
description: Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database).
type: string
description: Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database).
- in: query
name: groupId
schema:
description: 'Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.'
type: string
description: 'Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.'
- in: query
name: partnerTagId
schema:
description: 'Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.'
type: string
description: 'Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.'
- in: query
name: invoiceId
schema:
description: Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice.
type: string
description: Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice.
- in: query
name: status
schema:
description: Filter the list of commissions by their corresponding status.
type: string
enum:
- pending
- processed
- paid
- refunded
- duplicate
- fraud
- canceled
description: Filter the list of commissions by their corresponding status.
- in: query
name: sortBy
schema:
default: createdAt
description: The field to sort the list of commissions by.
type: string
enum:
- createdAt
- amount
description: The field to sort the list of commissions by.
- in: query
name: sortOrder
schema:
default: desc
description: The sort order for the list of commissions.
type: string
enum:
- asc
- desc
description: The sort order for the list of commissions.
- in: query
name: interval
schema:
default: all
description: The interval to retrieve commissions for.
type: string
enum:
- 24h
- 7d
- 30d
- 90d
- 1y
- mtd
- qtd
- ytd
- all
description: The interval to retrieve commissions for.
- in: query
name: start
schema:
description: The start date of the date range to filter the commissions by.
type: string
description: The start date of the date range to filter the commissions by.
- in: query
name: end
schema:
description: The end date of the date range to filter the commissions by.
type: string
description: The end date of the date range to filter the commissions by.
- in: query
name: timezone
schema:
type: string
- in: query
name: endingBefore
schema:
description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`.
example: cm_1KAP4CGN2Z5TPYYQ1W4JEYD56
type: string
description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`.
- in: query
name: startingAfter
schema:
description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`.
example: cm_1KAP4CGN2Z5TPYYQ1W4JEYD56
type: string
description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`.
- in: query
name: page
schema:
description: DEPRECATED. Use `startingAfter` instead.
example: 1
deprecated: true
type: number
minimum: 0
exclusiveMinimum: true
description: DEPRECATED. Use `startingAfter` instead.
- in: query
name: pageSize
schema:
default: 100
description: The number of items per page.
example: 50
type: number
minimum: 0
exclusiveMinimum: true
maximum: 100
description: The number of items per page.
responses:
'200':
description: The list of commissions.
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
description: The commission's unique ID on Dub.
example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE
type:
type: string
enum:
- click
- lead
- sale
- referral
- custom
amount:
type: number
earnings:
type: number
currency:
type: string
status:
type: string
enum:
- pending
- processed
- paid
- refunded
- duplicate
- fraud
- canceled
invoiceId:
nullable: true
type: string
description:
nullable: true
type: string
quantity:
type: number
userId:
description: The user who created the manual commission.
nullable: true
type: string
createdAt:
type: string
updatedAt:
type: string
partner:
type: object
properties:
id:
type: string
description: The partner's unique ID on Dub.
name:
type: string
maxLength: 190
description: The partner's full legal name.
email:
nullable: true
description: The partner's email address. Should be a unique value across Dub.
type: string
maxLength: 190
image:
nullable: true
description: The partner's avatar image.
type: string
payoutsEnabledAt:
nullable: true
description: The date when the partner enabled payouts.
type: string
country:
nullable: true
description: The partner's country (required for tax purposes).
type: string
groupId:
description: The partner's group ID on Dub.
nullable: true
type: string
required:
- id
- name
- email
- image
- payoutsEnabledAt
- country
additionalProperties: false
customer:
nullable: true
type: object
properties:
id:
type: string
description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`).
name:
description: Name of the customer.
nullable: true
type: string
email:
description: Email of the customer.
nullable: true
type: string
avatar:
description: Avatar URL of the customer.
nullable: true
type: string
externalId:
type: string
description: Unique identifier for the customer in the client's app.
stripeCustomerId:
description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer.
nullable: true
type: string
country:
description: Country of the customer.
nullable: true
type: string
sales:
description: Total number of sales for the customer.
nullable: true
type: number
saleAmount:
description: Total amount of sales for the customer.
nullable: true
type: number
createdAt:
description: The date the customer was created (usually the signup date or trial start date).
type: string
firstSaleAt:
description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV.
nullable: true
type: string
subscriptionCanceledAt:
description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate.
nullable: true
type: string
required:
- id
- externalId
- createdAt
additionalProperties: false
required:
- id
- amount
- earnings
- currency
- status
- invoiceId
- description
- quantity
- createdAt
- updatedAt
- partner
additionalProperties: false
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'409':
$ref: '#/components/responses/409'
'410':
$ref: '#/components/responses/410'
'422':
$ref: '#/components/responses/422'
'429':
$ref: '#/components/responses/429'
'500':
$ref: '#/components/responses/500'
/commissions/{id}:
patch:
operationId: updateCommission
x-speakeasy-name-override: update
summary: Update a commission
description: Update an existing commission amount. This is useful for handling refunds (partial or full) or fraudulent sales.
tags:
- Commissions
security:
- token: []
parameters:
- in: path
name: id
schema:
type: string
description: The commission's unique ID on Dub.
example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE
required: true
description: The commission's unique ID on Dub.
requestBody:
content:
application/json:
schema:
type: object
properties:
earnings:
description: The new earnings amount for the commission. Paid commissions cannot be updated. If provided, will override the earnings calculated based on the sale amount and currency.
type: number
minimum: 0
saleAmount:
description: The new absolute amount for the sale. Paid commissions cannot be updated.
type: number
minimum: 0
modifySaleAmount:
description: 'Modify the current sale amount: use positive values to increase the amount, negative values to decrease it. Takes precedence over `saleAmount`. Paid commissions cannot be updated.'
type: number
currency:
description: The currency of the sale amount to update. Accepts ISO 4217 currency codes.
default: usd
type: string
status:
description: Useful for marking a commission as pending, refunded, duplicate, canceled, or fraudulent. Takes precedence over `saleAmount` and `modifySaleAmount`. When a commission is marked as pending, refunded, duplicate, canceled, or fraudulent, it will be omitted from the payout, and the payout amount will be recalculated accordingly. Paid commissions cannot be updated.
type: string
enum:
- pending
- refunded
- duplicate
- canceled
- fraud
amount:
description: Deprecated. Use `saleAmount` instead.
deprecated: true
type: number
minimum: 0
modifyAmount:
description: Deprecated. Use `modifySaleAmount` instead.
deprecated: true
type: number
responses:
'200':
description: The updated commission.
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: The commission's unique ID on Dub.
example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE
type:
type: string
enum:
- click
- lead
- sale
- referral
- custom
amount:
type: number
earnings:
type: number
currency:
type: string
status:
type: string
enum:
- pending
- processed
- paid
- refunded
- duplicate
- fraud
- canceled
invoiceId:
nullable: true
type: string
description:
nullable: true
type: string
quantity:
type: number
userId:
description: The user who created the manual commission.
nullable: true
type: string
createdAt:
type: string
updatedAt:
type: string
partner:
type: object
properties:
id:
type: string
description: The partner's unique ID on Dub.
name:
type: string
maxLength: 190
description: The partner's full legal name.
email:
nullable: true
description: The partner's email address. Should be a unique value across Dub.
type: string
maxLength: 190
image:
nullable: true
description: The partner's avatar image.
type: string
payoutsEnabledAt:
nullable: true
description: The date when the partner enabled payouts.
type: string
country:
nullable: true
description: The partner's country (required for tax purposes).
type: string
groupId:
description: The partner's group ID on Dub.
nullable: true
type: string
required:
- id
- name
- email
- image
- payoutsEnabledAt
- country
additionalProperties: false
customer:
nullable: true
type: object
properties:
id:
type: string
description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`).
name:
description: Name of the customer.
nullable: true
type: string
email:
description: Email of the customer.
nullable: true
type: string
avatar:
description: Avatar URL of the customer.
nullable: true
type: string
externalId:
# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dub/refs/heads/main/openapi/dub-commissions-api-openapi.yml