Dub Partners API
The Partners API from Dub — 6 operation(s) for partners.
The Partners API from Dub — 6 operation(s) for partners.
openapi: 3.0.3
info:
title: Dub Analytics Partners 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: Partners
paths:
/partners:
post:
operationId: createPartner
x-speakeasy-name-override: create
summary: Create or update a partner
description: Creates or updates a partner record (upsert behavior). If a partner with the same email already exists, their program enrollment will be updated with the provided tenantId. If no existing partner is found, a new partner will be created using the supplied information.
tags:
- Partners
security:
- token: []
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
description: The partner's full name. If undefined, the partner's email will be used in lieu of their name (e.g. `john@acme.com`)
nullable: true
type: string
maxLength: 100
email:
type: string
maxLength: 190
format: email
pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
description: The partner's email address. Partners will be able to claim their profile by signing up at `partners.dub.co` with this email.
username:
description: The partner's unique username in your system (max 100 characters). This will be used to create a short link for the partner using your program's default domain. If not provided, Dub will try to generate a username from the partner's name or email.
nullable: true
type: string
maxLength: 100
image:
description: The partner's avatar image. If not provided, a default avatar will be used.
nullable: true
type: string
tenantId:
description: The partner's unique ID in your system. Useful for retrieving the partner's links and stats later on. If not provided, the partner will be created as a standalone partner.
type: string
groupId:
description: The group ID to add the partner to. If not provided, the partner will be added to the default group.
type: string
country:
description: The partner's country of residence. Must be passed as a 2-letter ISO 3166-1 country code. See https://d.to/geo for more information.
nullable: true
type: string
description:
description: A brief description of the partner and their background. Max 5,000 characters.
nullable: true
type: string
maxLength: 5000
linkProps:
description: Additional properties that you can pass to the partner's short link. Will be used to override the default link properties for this partner.
type: object
properties:
externalId:
description: The ID of the link in your database. If set, it can be used to identify the link in future API requests (must be prefixed with 'ext_' when passed as a query parameter). This key is unique across your workspace.
example: '123456'
nullable: true
type: string
minLength: 1
maxLength: 255
tenantId:
description: The ID of the tenant that created the link inside your system. If set, it can be used to fetch all links for a tenant.
nullable: true
type: string
maxLength: 255
prefix:
description: Path prefix for each default referral link slug (e.g. `/c/` → `https://{domain}/c/{identity}`). If the group has multiple default links, a short random suffix is appended to the identity segment for uniqueness (e.g. `c/jane-a7f2`).
type: string
archived:
description: Whether the short link is archived. Defaults to `false` if not provided.
type: boolean
tagIds:
description: The unique IDs of the tags assigned to the short link.
example:
- clux0rgak00011...
anyOf:
- type: string
- type: array
items:
type: string
tagNames:
description: The unique name of the tags assigned to the short link (case insensitive).
anyOf:
- type: string
- type: array
items:
type: string
comments:
description: The comments for the short link.
nullable: true
type: string
expiresAt:
description: The date and time when the short link will expire at.
nullable: true
type: string
expiredUrl:
description: The URL to redirect to when the short link has expired.
maxLength: 32000
nullable: true
type: string
password:
description: The password required to access the destination URL of the short link.
nullable: true
type: string
proxy:
description: Whether the short link uses Custom Link Previews feature. Defaults to `false` if not provided.
type: boolean
title:
description: 'The custom link preview title (og:title). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og'
nullable: true
type: string
description:
description: 'The custom link preview description (og:description). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og'
nullable: true
type: string
image:
description: 'The custom link preview image (og:image). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og'
nullable: true
type: string
video:
description: 'The custom link preview video (og:video). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og'
nullable: true
type: string
rewrite:
description: Whether the short link uses link cloaking. Defaults to `false` if not provided.
type: boolean
ios:
description: The iOS destination URL for the short link for iOS device targeting.
nullable: true
type: string
maxLength: 32000
android:
description: The Android destination URL for the short link for Android device targeting.
nullable: true
type: string
maxLength: 32000
doIndex:
description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex'
type: boolean
testVariants:
nullable: true
minItems: 2
maxItems: 4
type: array
items:
type: object
properties:
url:
type: string
percentage:
type: number
minimum: 10
maximum: 90
required:
- url
- percentage
description: An array of A/B test URLs and the percentage of traffic to send to each URL.
example:
- url: https://example.com/variant-1
percentage: 50
- url: https://example.com/variant-2
percentage: 50
testStartedAt:
description: The date and time when the tests started.
nullable: true
type: string
testCompletedAt:
description: The date and time when the tests were or will be completed.
nullable: true
type: string
required:
- email
responses:
'201':
description: The created or updated partner
content:
application/json:
schema:
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.
username:
nullable: true
description: The partner's unique username on Dub.
type: string
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
description:
description: A brief description of the partner and their background.
nullable: true
type: string
maxLength: 5000
country:
nullable: true
description: The partner's country (required for tax purposes).
type: string
companyName:
nullable: true
description: If the partner profile type is a company, this is the partner's legal company name.
type: string
maxLength: 190
networkStatus:
type: string
enum:
- draft
- submitted
- approved
- rejected
- trusted
description: The partner's network status on Dub.
defaultPayoutMethod:
nullable: true
description: 'The partner''s default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal'
type: string
enum:
- connect
- stablecoin
- paypal
paypalEmail:
nullable: true
description: The partner's PayPal email (for receiving payouts via PayPal).
type: string
stripeConnectId:
nullable: true
description: The partner's Stripe Connect ID (for receiving payouts via Stripe).
type: string
payoutsEnabledAt:
nullable: true
description: The date when the partner enabled payouts.
type: string
identityVerifiedAt:
nullable: true
description: The date when the partner's identity was verified.
type: string
programId:
type: string
description: The program's unique ID on Dub.
groupId:
description: The partner's group ID on Dub.
nullable: true
type: string
partnerId:
type: string
description: The partner's unique ID on Dub.
tenantId:
nullable: true
description: The partner's unique ID within your database. Can be useful for associating the partner with a user in your database and retrieving/update their data in the future.
type: string
createdAt:
type: string
status:
type: string
enum:
- pending
- approved
- rejected
- invited
- declined
- deactivated
- banned
- archived
description: The status of the partner's enrollment in the program.
links:
nullable: true
description: The partner's referral links in this program.
type: array
items:
type: object
properties:
id:
type: string
description: The unique ID of the short link.
domain:
type: string
description: The domain of the short link. If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains).
key:
type: string
description: The short link slug. If not provided, a random 7-character slug will be generated.
shortLink:
type: string
format: uri
description: The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`).
url:
type: string
format: uri
description: The destination URL of the short link.
clicks:
default: 0
description: The number of clicks on the short link.
type: number
leads:
default: 0
description: The number of leads the short link has generated.
type: number
conversions:
default: 0
description: The number of leads that converted to paying customers.
type: number
sales:
default: 0
description: The total number of sales (includes recurring sales) generated by the short link.
type: number
saleAmount:
description: The total dollar value of sales (in cents) generated by the short link.
default: 0
type: number
required:
- id
- domain
- key
- shortLink
- url
- clicks
- leads
- conversions
- sales
- saleAmount
additionalProperties: false
totalCommissions:
description: The total commissions paid to the partner for their referrals
default: 0
type: number
clickRewardId:
nullable: true
type: string
leadRewardId:
nullable: true
type: string
saleRewardId:
nullable: true
type: string
referralRewardId:
nullable: true
type: string
discountId:
nullable: true
type: string
applicationId:
description: If the partner submitted an application to join the program, this is the ID of the application.
nullable: true
type: string
bannedAt:
description: If the partner was banned from the program, this is the date of the ban.
nullable: true
type: string
bannedReason:
description: If the partner was banned from the program, this is the reason for the ban.
nullable: true
type: string
enum:
- tos_violation
- inappropriate_content
- fake_traffic
- fraud
- spam
- brand_abuse
referralFormData:
nullable: true
type: object
properties:
fields:
minItems: 1
type: array
items:
oneOf:
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- text
constraints:
type: object
properties:
maxLength:
type: integer
exclusiveMinimum: true
maximum: 9007199254740991
pattern:
type: string
additionalProperties: false
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- textarea
constraints:
type: object
properties:
maxLength:
type: integer
exclusiveMinimum: true
maximum: 9007199254740991
additionalProperties: false
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- select
options:
minItems: 2
type: array
items:
type: object
properties:
label:
type: string
minLength: 1
value:
type: string
minLength: 1
required:
- label
- value
additionalProperties: false
required:
- key
- label
- required
- locked
- position
- type
- options
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- country
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- date
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- multiSelect
options:
minItems: 2
type: array
items:
type: object
properties:
label:
type: string
minLength: 1
value:
type: string
minLength: 1
required:
- label
- value
additionalProperties: false
required:
- key
- label
- required
- locked
- position
- type
- options
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- number
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
- type: object
properties:
key:
type: string
minLength: 1
label:
type: string
minLength: 1
required:
type: boolean
locked:
type: boolean
position:
type: integer
minimum: 0
maximum: 9007199254740991
type:
type: string
enum:
- phone
required:
- key
- label
- required
- locked
- position
- type
additionalProperties: false
type: object
required:
- fields
additionalProperties: false
application:
description: Linked program application, including review outcome when applicable.
nullable: true
type: object
properties:
rejectionReason:
nullable: true
description: Preset reason when the application was rejected.
type: string
enum:
- needsMoreDetail
- doesNotMeetRequirements
- notTheRightFit
- other
rejectionNote:
nullable: true
description: Free-form note when the application was rejected.
type: string
reviewedAt:
nullable: true
description: When the application was approved or rejected.
type: string
required:
- rejectionReason
- rejectionNote
- reviewedAt
additionalProperties: false
tags:
description: The tags associated with the partner.
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
required:
- id
- name
additionalProperties: false
totalClicks:
default: 0
description: The total number of clicks on the partner's links
type: number
totalLeads:
default: 0
description: The total number of leads generated by the partner'
# --- truncated at 32 KB (123 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dub/refs/heads/main/openapi/dub-partners-api-openapi.yml