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's links type: number totalConversions: default: 0 description: The total number of leads that converted to paying customers type: number totalSales: default: 0 description: The total number of sales generated by the partner's links (includes recurring sales) type: number totalSaleAmount: description: Total revenue generated by the partner's links default: 0 type: number netRevenue: description: Net revenue after commissions (`Total Revenue - Total Commissions`) default: 0 type: number earningsPerClick: description: Earnings Per Click (EPC) (`Total Revenue ÷ Total Clicks`) nullable: true type: number averageLifetimeValue: description: Average lifetime value for each paying customer (`Total Revenue ÷ Total Conversions`) nullable: true type: number clickToLeadRate: description: Percentage of clicks that become leads (`Total Leads ÷ Total Clicks`) nullable: true type: number clickToConversionRate: description: Percentage of clicks that convert to paying customers (`Total Conversions ÷ Total Clicks`) nullable: true type: number leadToConversionRate: description: Percentage of leads that convert to paying customers (`Total Conversions ÷ Total Leads`) nullable: true type: number returnOnAdSpend: description: Return On Ad Spend (ROAS) (`Total Revenue ÷ Total Commissions`) nullable: true type: number website: description: The partner's website URL (including the https protocol). nullable: true type: string youtube: description: The partner's YouTube channel username (e.g. `johndoe`). nullable: true type: string twitter: description: The partner's Twitter username (e.g. `johndoe`). nullable: true type: string linkedin: description: The partner's LinkedIn username (e.g. `johndoe`). nullable: true type: string instagram: description: The partner's Instagram username (e.g. `johndoe`). nullable: true type: string tiktok: description: The partner's TikTok username (e.g. `johndoe`). nullable: true type: string trustedAt: deprecated: true description: 'DEPRECATED: Use `networkStatus` instead.' nullable: true type: string required: - id - name - username - email - image - country - companyName - networkStatus - defaultPayoutMethod - paypalEmail - stripeConnectId - payoutsEnabledAt - identityVerifiedAt - programId - partnerId - tenantId - createdAt - status - links - totalCommissions - totalClicks - totalLeads - totalConversions - totalSales - totalSaleAmount - netRevenue 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: listPartners x-speakeasy-name-override: list summary: List all partners description: List all partners for a partner program. tags: - Partners security: - token: [] parameters: - 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: status schema: description: A filter on the list based on the partner's `status` field. example: approved type: string enum: - pending - approved - rejected - invited - declined - deactivated - banned - archived description: A filter on the list based on the partner's `status` field. - 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: sortBy schema: default: totalSaleAmount description: The field to sort the partners by. The default is `totalSaleAmount`. example: totalSaleAmount type: string enum: - createdAt - totalClicks - totalLeads - totalConversions - totalSaleAmount - totalCommissions - netRevenue - earningsPerClick - averageLifetimeValue - clickToLeadRate - clickToConversionRate - leadToConversionRate - returnOnAdSpend description: The field to sort the partners by. The default is `totalSaleAmount`. - 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: email schema: description: Filter the partner list based on the partner's `email`. The value must be a string. Takes precedence over `search`. example: panic@thedis.co type: string description: Filter the partner list based on the partner's `email`. The value must be a string. Takes precedence over `search`. - in: query name: tenantId schema: description: Filter the partner list based on the partner's `tenantId`. The value must be a string. Takes precedence over `email` and `search`. example: 1K0NM7HCN944PEMZ3CQPH43H8 type: string description: Filter the partner list based on the partner's `tenantId`. The value must be a string. Takes precedence over `email` and `search`. - in: query name: search schema: description: A search query to filter partners by ID, name, email, or link. example: john type: string description: A search query to filter partners by ID, name, email, or link. - in: query name: page schema: description: The page number for pagination. example: 1 deprecated: false type: number minimum: 0 exclusiveMinimum: true description: The page number for pagination. - 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 partners. content: application/json: schema: type: array items: 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's links type: number totalConversions: default: 0 description: The total number of leads that converted to paying customers type: number totalSales: default: 0 description: The total number of sales generated by the partner's links (includes recurring sales) type: number totalSaleAmount: description: Total revenue generated by the partner's links default: 0 type: number netRevenue: description: Net revenue after commissions (`Total Revenue - Total Commissions`) default: 0 type: number earningsPerClick: description: Earnings Per Click (EPC) (`Total Revenue ÷ Total Clicks`) nullable: true type: number averageLifetimeValue: description: Average lifetime value for each paying customer (`Total Revenue ÷ Total Conversions`) nullable: true type: number clickToLeadRate: description: Percentage of clicks that become leads (`Total Leads ÷ Total Clicks`) nullable: true type: number clickToConversionRate: description: Percentage of clicks that convert to paying customers (`Total Conversions ÷ Total Clicks`) nullable: true type: number leadToConversionRate: description: Percentage of leads that convert to paying customers (`Total Conversions ÷ Total Leads`) nullable: true type: number returnOnAdSpend: description: Return On Ad Spend (ROAS) (`Total Revenue ÷ Total Commissions`) nullable: true type: number website: description: The partner's website URL (including the https protocol). nullable: true type: string youtube: description: The partner's YouTube channel username (e.g. `johndoe`). nullable: true type: string twitter: description: The partner's Twitter username (e.g. `johndoe`). nullable: true type: string linkedin: description: The partner's LinkedIn username (e.g. `johndoe`). nullable: true type: string instagram: description: The partner's Instagram username (e.g. `johndoe`). nullable: true type: string tiktok: description: The partner's TikTok username (e.g. `johndoe`). nullable: true type: string trustedAt: deprecated: true description: 'DEPRECATED: Use `networkStatus` instead.' nullable: true type: string required: - id - name - username - email - image - country - companyName - networkStatus - defaultPayoutMethod - paypalEmail - stripeConnectId - payoutsEnabledAt - identityVerifiedAt - programId - partnerId - tenantId - createdAt - status - links - totalCommissions - totalClicks - totalLeads - totalConversions - totalSales - totalSaleAmount - netRevenue 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' /partners/links: post: operationId: createPartnerLink x-speakeasy-name-override: createLink summary: Create a link for a partner description: Create a link for a partner that is enrolled in your program. tags: - Partners security: - token: [] requestBody: content: application/json: schema: type: object properties: partnerId: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string tenantId: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string url: nullable: true description: The URL to shorten (if not provided, the program's default URL will be used). Will throw an error if the domain doesn't match the program's default URL domain. type: string maxLength: 32000 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 comments: description: The comments for the short link. nullable: true type: string 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 responses: '201': description: The created partner link content: application/json: schema: $ref: '#/components/schemas/LinkSchema' '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: retrievePartnerLinks x-speakeasy-name-override: retrieveLinks summary: Retrieve a partner's links. description: Retrieve a partner's links by their partner ID or tenant ID. tags: - Partners security: - token: [] parameters: - in: query name: partnerId schema: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. - in: query name: tenantId schema: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. responses: '200': description: The retrieved partner links. content: application/json: schema: 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 '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' /partners/links/upsert: put: operationId: upsertPartnerLink x-speakeasy-name-override: upsertLink summary: Upsert a link for a partner description: Upsert a link for a partner that is enrolled in your program. If a link with the same URL already exists, return it (or update it if there are any changes). Otherwise, a new link will be created. tags: - Partners security: - token: [] requestBody: content: application/json: schema: type: object properties: partnerId: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string tenantId: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string url: description: The URL to upsert for. Will throw an error if the domain doesn't match the program's default URL domain. type: string maxLength: 32000 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 comments: description: The comments for the short link. nullable: true type: string 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: - url responses: '200': description: The upserted partner link content: application/json: schema: $ref: '#/components/schemas/LinkSchema' '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' /partners/analytics: get: operationId: retrievePartnerAnalytics x-speakeasy-name-override: analytics summary: Retrieve analytics for a partner description: Retrieve analytics for a partner within a program. The response type vary based on the `groupBy` query parameter. tags: - Partners security: - token: [] parameters: - in: query name: partnerId schema: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. - in: query name: tenantId schema: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. - in: query name: interval schema: description: The interval to retrieve analytics for. If undefined, defaults to 24h. type: string enum: - 24h - 7d - 30d - 90d - 1y - mtd - qtd - ytd - all description: The interval to retrieve analytics for. If undefined, defaults to 24h. - in: query name: start schema: description: The start date and time when to retrieve analytics from. If set, takes precedence over `interval`. type: string description: The start date and time when to retrieve analytics from. If set, takes precedence over `interval`. - in: query name: end schema: description: The end date and time when to retrieve analytics from. If not provided, defaults to the current date. If set along with `start`, takes precedence over `interval`. type: string description: The end date and time when to retrieve analytics from. If not provided, defaults to the current date. If set along with `start`, takes precedence over `interval`. - in: query name: timezone schema: description: The IANA time zone code for aligning timeseries granularity (e.g. America/New_York). Defaults to UTC. example: America/New_York default: UTC type: string description: The IANA time zone code for aligning timeseries granularity (e.g. America/New_York). Defaults to UTC. - in: query name: query schema: description: 'Search the events by a custom metadata value. Only available for lead and sale events. Examples: `metadata[''key'']:''value''`' type: string maxLength: 10000 description: 'Search the events by a custom metadata value. Only available for lead and sale events. Examples: `metadata[''key'']:''value''`' - in: query name: groupBy schema: default: count description: The parameter to group the analytics data points by. Defaults to `count` if undefined. type: string enum: - top_links - timeseries - count description: The parameter to group the analytics data points by. Defaults to `count` if undefined. responses: '200': description: Partner analytics data content: application/json: schema: anyOf: - $ref: '#/components/schemas/PartnerAnalyticsCount' - type: array items: $ref: '#/components/schemas/PartnerAnalyticsTimeseries' - type: array items: $ref: '#/components/schemas/PartnerAnalyticsTopLinks' '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' /partners/ban: post: operationId: banPartner x-speakeasy-name-override: ban summary: Ban a partner description: Ban a partner from your program. This will disable all links and mark all commissions as canceled. tags: - Partners security: - token: [] requestBody: content: application/json: schema: type: object properties: partnerId: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string tenantId: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string reason: type: string enum: - tos_violation - inappropriate_content - fake_traffic - fraud - spam - brand_abuse description: The reason for banning the partner. required: - reason responses: '200': description: The banned partner content: application/json: schema: type: object properties: partnerId: type: string description: The ID of the banned 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' /partners/deactivate: post: operationId: deactivatePartner x-speakeasy-name-override: deactivate summary: Deactivate a partner description: This will deactivate the partner from your program and disable all their active links. Their commissions and payouts will remain intact. You can reactivate them later if needed. tags: - Partners security: - token: [] requestBody: content: application/json: schema: type: object properties: partnerId: description: The ID of the partner to create a link for. Will take precedence over `tenantId` if provided. nullable: true type: string tenantId: description: The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown. nullable: true type: string responses: '200': description: The deactivated partner content: application/json: schema: type: object properties: partnerId: type: string description: The ID of the deactivated 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: '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 '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 '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 '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 '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 '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 '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 '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 '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 schemas: LinkSchema: 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. url: type: string format: uri description: The destination URL of the short link. trackConversion: default: false description: Whether to track conversions for the short link. type: boolean externalId: nullable: true 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. type: string tenantId: nullable: true 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. type: string programId: nullable: true description: The ID of the program the short link is associated with. type: string partnerId: nullable: true description: The ID of the partner the short link is associated with. type: string archived: default: false description: Whether the short link is archived. type: boolean expiresAt: nullable: true description: The date and time when the short link will expire in ISO-8601 format. type: string expiredUrl: nullable: true description: The URL to redirect to when the short link has expired. type: string format: uri disabledAt: nullable: true description: The date and time when the short link was disabled. When a short link is disabled, it will redirect to its domain's not found URL, and its stats will be excluded from your overall stats. type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: default: false description: Whether the short link uses Custom Link Previews feature. type: boolean title: nullable: true description: The title of the short link. Will be used for Custom Link Previews if `proxy` is true. type: string description: nullable: true description: The description of the short link. Will be used for Custom Link Previews if `proxy` is true. type: string image: nullable: true description: The image of the short link. Will be used for Custom Link Previews if `proxy` is true. type: string video: nullable: true 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' type: string rewrite: default: false description: Whether the short link uses link cloaking. type: boolean doIndex: default: false description: Whether to allow search engines to index the short link. type: boolean ios: nullable: true description: The iOS destination URL for the short link for iOS device targeting. type: string android: nullable: true description: The Android destination URL for the short link for Android device targeting. type: string geo: nullable: true description: 'Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information.' type: object additionalProperties: type: string format: uri publicStats: default: false description: Whether the short link's stats are publicly accessible. type: boolean tags: nullable: true description: The tags assigned to the short link. type: array items: $ref: '#/components/schemas/LinkTagSchemaOutput' folderId: nullable: true description: The unique ID of the folder assigned to the short link. type: string webhookIds: type: array items: type: string description: The IDs of the webhooks that the short link is associated with. comments: nullable: true description: The comments for the short link. type: string shortLink: type: string format: uri description: The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`). qrCode: type: string format: uri description: The full URL of the QR code for the short link (e.g. `https://api.dub.co/qr?url=https://dub.sh/try`). utm_source: nullable: true description: The UTM source of the short link. type: string utm_medium: nullable: true description: The UTM medium of the short link. type: string utm_campaign: nullable: true description: The UTM campaign of the short link. type: string utm_term: nullable: true description: The UTM term of the short link. type: string utm_content: nullable: true description: The UTM content of the short link. type: string 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 additionalProperties: false 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 userId: nullable: true description: The user ID of the creator of the short link. type: string workspaceId: type: string description: The workspace ID 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 lastClicked: nullable: true description: The date and time when the short link was last clicked. type: string createdAt: type: string description: The date and time when the short link was created. updatedAt: type: string description: The date and time when the short link was last updated. tagId: nullable: true description: 'Deprecated: Use `tags` instead. The unique ID of the tag assigned to the short link.' deprecated: true type: string projectId: type: string description: 'Deprecated: Use `workspaceId` instead. The project ID of the short link.' deprecated: true required: - id - domain - key - url - trackConversion - externalId - tenantId - programId - partnerId - archived - expiresAt - expiredUrl - disabledAt - password - proxy - title - description - image - video - rewrite - doIndex - ios - android - geo - publicStats - tags - folderId - webhookIds - comments - shortLink - qrCode - utm_source - utm_medium - utm_campaign - utm_term - utm_content - userId - workspaceId - clicks - leads - conversions - sales - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId additionalProperties: false title: Link PartnerAnalyticsTopLinks: type: object properties: link: type: string description: The unique ID of the short link deprecated: true id: type: string description: The unique ID of the short link domain: type: string description: The domain of the short link key: type: string description: The key of the short link shortLink: type: string description: The short link URL url: type: string description: The destination URL of the short link title: description: The custom link preview title (og:title) nullable: true type: string comments: description: The comments of the short link nullable: true type: string folderId: description: The ID of the folder that the link belongs to (if applicable) nullable: true type: string partnerId: description: The ID of the partner that the link belongs to (if applicable) nullable: true type: string createdAt: type: string description: The creation timestamp of the short link clicks: default: 0 type: number description: The number of clicks from this link leads: default: 0 type: number description: The number of leads from this link sales: default: 0 type: number description: The number of sales from this link saleAmount: description: The total amount of sales from this link, in cents default: 0 type: number earnings: default: 0 type: number required: - link - id - domain - key - shortLink - url - createdAt - clicks - leads - sales - saleAmount - earnings additionalProperties: false title: PartnerAnalyticsTopLinks PartnerAnalyticsCount: type: object properties: clicks: default: 0 type: number description: The total number of clicks leads: default: 0 type: number description: The total number of leads sales: default: 0 type: number description: The total number of sales saleAmount: description: The total amount of sales, in cents default: 0 type: number earnings: default: 0 type: number required: - clicks - leads - sales - saleAmount - earnings additionalProperties: false title: PartnerAnalyticsCount LinkTagSchemaOutput: type: object properties: id: type: string description: The unique ID of the tag. name: type: string description: The name of the tag. color: type: string enum: - red - yellow - green - blue - purple - brown - gray - pink description: The color of the tag. required: - id - name - color additionalProperties: false title: LinkTag PartnerAnalyticsTimeseries: type: object properties: start: type: string description: The starting timestamp of the interval clicks: default: 0 type: number description: The number of clicks in the interval leads: default: 0 type: number description: The number of leads in the interval sales: default: 0 type: number description: The number of sales in the interval saleAmount: description: The total amount of sales in the interval, in cents default: 0 type: number earnings: default: 0 type: number required: - start - clicks - leads - sales - saleAmount - earnings additionalProperties: false title: PartnerAnalyticsTimeseries securitySchemes: token: type: http description: Default authentication mechanism scheme: bearer x-speakeasy-example: DUB_API_KEY