Dub Program Applications API
The Program Applications API from Dub — 3 operation(s) for program applications.
The Program Applications API from Dub — 3 operation(s) for program applications.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/dub:dub-program-applications-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Dub Program Applications 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: Program Applications
paths:
/program-applications:
get:
operationId: listProgramApplications
x-speakeasy-name-override: list
summary: List all program applications
description: Retrieve a paginated list of applications for your partner program. Filter by `status` to list pending, approved, or rejected applications.
tags:
- Program Applications
security:
- token: []
parameters:
- in: query
name: country
schema:
description: A filter on the list based on the partner's `country` field.
example: US
type: string
description: A filter on the list based on the partner's `country` field.
- in: query
name: groupId
schema:
description: A filter on the list based on the partner's `groupId` field.
example: grp_123
type: string
description: A filter on the list based on the partner's `groupId` field.
- in: query
name: sortOrder
schema:
default: desc
description: The sort order. The default is `desc`.
example: desc
type: string
enum:
- asc
- desc
description: The sort order. The default is `desc`.
- in: query
name: search
schema:
description: Filter applications by name, email, or company name. Partial matches are supported. An exact partner ID is also matched.
type: string
description: Filter applications by name, email, or company name. Partial matches are supported. An exact partner ID is also matched.
- in: query
name: status
schema:
default: pending
description: Filter applications by status. One of `pending`, `approved`, or `rejected`. Defaults to `pending`.
type: string
enum:
- pending
- approved
- rejected
description: Filter applications by status. One of `pending`, `approved`, or `rejected`. Defaults to `pending`.
- in: query
name: page
schema:
description: The page number for pagination. The first page is `1`.
example: 1
deprecated: false
type: integer
maximum: 9007199254740991
description: The page number for pagination. The first page is `1`.
- in: query
name: pageSize
schema:
default: 100
description: The number of items per page.
example: 50
type: integer
maximum: 100
description: The number of items per page.
responses:
'200':
description: The list of program applications.
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
createdAt:
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.
companyName:
description: If the partner profile type is a company, this is the partner's legal company name.
type:
- string
- 'null'
maxLength: 190
email:
description: The partner's email address. Should be a unique value across Dub.
type:
- string
- 'null'
maxLength: 190
image:
description: The partner's avatar image.
type:
- string
- 'null'
description:
description: A brief description of the partner and their background.
type:
- string
- 'null'
maxLength: 5000
country:
description: The partner's country (required for tax purposes).
type:
- string
- 'null'
groupId:
description: The partner's group ID on Dub.
type:
- string
- 'null'
status:
type: string
enum:
- pending
- approved
- rejected
- invited
- declined
- deactivated
- banned
- archived
description: The status of the partner's enrollment in the program.
website:
description: The partner's website URL (including the https protocol).
type:
- string
- 'null'
youtube:
description: The partner's YouTube channel username (e.g. `johndoe`).
type:
- string
- 'null'
twitter:
description: The partner's Twitter username (e.g. `johndoe`).
type:
- string
- 'null'
linkedin:
description: The partner's LinkedIn username (e.g. `johndoe`).
type:
- string
- 'null'
instagram:
description: The partner's Instagram username (e.g. `johndoe`).
type:
- string
- 'null'
tiktok:
description: The partner's TikTok username (e.g. `johndoe`).
type:
- string
- 'null'
networkStatus:
type: string
enum:
- draft
- submitted
- approved
- rejected
- trusted
description: The partner's network status on Dub.
defaultPayoutMethod:
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
- 'null'
enum:
- connect
- stablecoin
- paypal
- tremendous
payoutsEnabledAt:
description: The date when the partner enabled payouts.
type:
- string
- 'null'
platforms:
description: The partner's website and social profiles, including when each was verified.
type:
- array
- 'null'
items:
type: object
properties:
type:
type: string
enum:
- website
- youtube
- twitter
- linkedin
- instagram
- tiktok
identifier:
type: string
verifiedAt:
type:
- string
- 'null'
required:
- type
- identifier
- verifiedAt
additionalProperties: false
required:
- id
- name
- companyName
- email
- image
- country
- status
- networkStatus
- defaultPayoutMethod
- payoutsEnabledAt
additionalProperties: false
applicationFormData:
type:
- array
- 'null'
items:
type: object
properties:
label:
type: string
value:
type:
- string
- 'null'
required:
- label
- value
additionalProperties: false
required:
- id
- createdAt
- partner
- applicationFormData
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'
/program-applications/approve:
post:
operationId: approveProgramApplication
x-speakeasy-name-override: approve
summary: Approve a partner application
description: Approve a pending partner application to your program. The partner will be enrolled in the specified group and notified of the approval.
tags:
- Program Applications
security:
- token: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
partnerId:
type: string
description: The ID of the partner to approve.
applicationId:
description: The ID of the application to approve. If not provided, the partner's most recent pending or rejected application is used. For a partner who is already approved in the program, only a pending application is used.
type: string
groupId:
description: The ID of the group to assign the partner to. If not provided, the partner will be assigned to the group they applied to, or the program's default group if no application group is set.
type:
- string
- 'null'
tagIds:
description: The IDs of the partner tags to assign as part of approval. Existing tags are kept. Takes priority over `tagNames` only when it contains at least one ID.
maxItems: 100
type: array
items:
type: string
tagNames:
description: The names of the partner tags to assign as part of approval. Existing tags are kept. Ignored only when `tagIds` contains at least one ID.
maxItems: 100
type: array
items:
type: string
required:
- partnerId
responses:
'200':
description: The approved partner
content:
application/json:
schema:
type: object
properties:
partnerId:
type: string
description: The ID of the approved partner.
required:
- partnerId
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'
/program-applications/reject:
post:
operationId: rejectProgramApplication
x-speakeasy-name-override: reject
summary: Reject a partner application
description: Reject a pending partner application to your program. The partner will be notified via email that their application was not approved.
tags:
- Program Applications
security:
- token: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
partnerId:
type: string
description: The ID of the partner to reject.
rejectionReason:
description: The reason for rejecting the partner application. This will be shared with the partner via email.
type: string
enum:
- needsMoreDetail
- doesNotMeetRequirements
- notTheRightFit
- other
rejectionNote:
description: Additional details about the rejection. This will be shared with the partner via email.
type: string
maxLength: 500
reapplicationTimeframe:
default: standard
description: 'The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined.'
type: string
enum:
- instant
- standard
- never
flagForFraud:
description: 'Whether to flag the partner for fraud review by the Dub team. Cannot be combined with `reapplicationTimeframe: instant`.'
type: boolean
flagForFraudReason:
description: The reason for flagging the partner for fraud. Required when flagForFraud is true.
type: string
maxLength: 2000
required:
- partnerId
responses:
'200':
description: The rejected partner
content:
application/json:
schema:
type: object
properties:
partnerId:
type: string
description: The ID of the rejected partner.
required:
- partnerId
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'
components:
responses:
'400':
description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing).
content:
application/json:
schema:
x-speakeasy-name-override: BadRequest
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- bad_request
description: A short code indicating the error code returned.
example: bad_request
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#bad-request
required:
- code
- message
required:
- error
'500':
description: The server has encountered a situation it does not know how to handle.
content:
application/json:
schema:
x-speakeasy-name-override: InternalServerError
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- internal_server_error
description: A short code indicating the error code returned.
example: internal_server_error
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#internal-server_error
required:
- code
- message
required:
- error
'401':
description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
content:
application/json:
schema:
x-speakeasy-name-override: Unauthorized
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- unauthorized
description: A short code indicating the error code returned.
example: unauthorized
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#unauthorized
required:
- code
- message
required:
- error
'422':
description: The request was well-formed but was unable to be followed due to semantic errors.
content:
application/json:
schema:
x-speakeasy-name-override: UnprocessableEntity
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- unprocessable_entity
description: A short code indicating the error code returned.
example: unprocessable_entity
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#unprocessable-entity
required:
- code
- message
required:
- error
'429':
description: The user has sent too many requests in a given amount of time ("rate limiting")
content:
application/json:
schema:
x-speakeasy-name-override: RateLimitExceeded
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- rate_limit_exceeded
description: A short code indicating the error code returned.
example: rate_limit_exceeded
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#rate-limit_exceeded
required:
- code
- message
required:
- error
'409':
description: This response is sent when a request conflicts with the current state of the server.
content:
application/json:
schema:
x-speakeasy-name-override: Conflict
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- conflict
description: A short code indicating the error code returned.
example: conflict
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#conflict
required:
- code
- message
required:
- error
'403':
description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401 Unauthorized, the client's identity is known to the server.
content:
application/json:
schema:
x-speakeasy-name-override: Forbidden
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- forbidden
description: A short code indicating the error code returned.
example: forbidden
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#forbidden
required:
- code
- message
required:
- error
'410':
description: This response is sent when the requested content has been permanently deleted from server, with no forwarding address.
content:
application/json:
schema:
x-speakeasy-name-override: InviteExpired
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- invite_expired
description: A short code indicating the error code returned.
example: invite_expired
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#invite-expired
required:
- code
- message
required:
- error
'404':
description: The server cannot find the requested resource.
content:
application/json:
schema:
x-speakeasy-name-override: NotFound
type: object
properties:
error:
type: object
properties:
code:
type: string
enum:
- not_found
description: A short code indicating the error code returned.
example: not_found
message:
x-speakeasy-error-message: true
type: string
description: A human readable explanation of what went wrong.
example: The requested resource was not found.
doc_url:
type: string
description: A link to our documentation with more details about this error code
example: https://dub.co/docs/api-reference/errors#not-found
required:
- code
- message
required:
- error
securitySchemes:
token:
type: http
description: Default authentication mechanism
scheme: bearer
x-speakeasy-example: DUB_API_KEY
x-provenance:
method: harvested
publisher: Dub
source: https://dub.co/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)