openapi: 3.0.3 info: title: Dub 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 paths: /links: post: operationId: createLink x-speakeasy-name-override: create x-speakeasy-usage-example: true summary: Create a link description: Create a link for the authenticated workspace. tags: - Links security: - token: [] requestBody: content: application/json: schema: type: object properties: url: description: The destination URL of the short link. example: https://google.com maxLength: 32000 type: string domain: description: The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains). type: string maxLength: 190 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 keyLength: description: The length of the short link slug. Defaults to 7 if not provided. When used with `prefix`, the total length of the key will be `prefix.length + keyLength`. type: number minimum: 3 maximum: 190 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 programId: description: The ID of the program the short link is associated with. nullable: true type: string partnerId: description: The ID of the partner the short link is associated with. nullable: true type: string prefix: description: The prefix of the short link slug for randomly-generated keys (e.g. if prefix is `/c/`, generated keys will be in the `/c/:key` format). Will be ignored if `key` is provided. type: string trackConversion: description: Whether to track conversions for the short link. Defaults to `false` if not provided. type: boolean 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 folderId: description: The unique ID existing folder to assign the short link to. nullable: true 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 geo: $ref: '#/components/schemas/linkGeoTargeting' doIndex: description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex' type: boolean utm_source: description: The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. nullable: true type: string utm_medium: description: The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. nullable: true type: string utm_campaign: description: The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. nullable: true type: string utm_term: description: The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. nullable: true type: string utm_content: description: The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. nullable: true type: string ref: description: The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. nullable: true type: string webhookIds: description: An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. nullable: true type: array items: 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 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 publicStats: description: 'Deprecated: Use `dashboard` instead. Whether the short link''s stats are publicly accessible. Defaults to `false` if not provided.' deprecated: true type: boolean tagId: description: 'Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link.' deprecated: true nullable: true type: string required: - url responses: '200': description: The created 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: getLinks x-speakeasy-name-override: list x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: pageSize in: parameters type: limit outputs: results: $ summary: List all links description: Retrieve a paginated list of links for the authenticated workspace. tags: - Links security: - token: [] parameters: - in: query name: domain schema: description: The domain to filter the links by. E.g. `ac.me`. If not provided, all links for the workspace will be returned. type: string description: The domain to filter the links by. E.g. `ac.me`. If not provided, all links for the workspace will be returned. - in: query name: tagId schema: description: 'Deprecated: Use `tagIds` instead. The tag ID to filter the links by.' deprecated: true type: string description: 'Deprecated: Use `tagIds` instead. The tag ID to filter the links by.' - in: query name: tagIds schema: description: The tag IDs to filter the links by. anyOf: - type: string - type: array items: type: string style: form explode: false description: The tag IDs to filter the links by. - in: query name: tagNames schema: description: The unique name of the tags assigned to the short link (case insensitive). anyOf: - type: string - type: array items: type: string style: form explode: false description: The unique name of the tags assigned to the short link (case insensitive). - in: query name: folderId schema: description: The folder ID to filter the links by. type: string description: The folder ID to filter the links by. - in: query name: search schema: description: The search term to filter the links by. The search term will be matched against the short link slug and the destination url. type: string description: The search term to filter the links by. The search term will be matched against the short link slug and the destination url. - in: query name: userId schema: description: The user ID to filter the links by. type: string description: The user ID to filter the links by. - in: query name: tenantId schema: description: The ID of the tenant that created the link inside your system. If set, will only return links for the specified tenant. type: string description: The ID of the tenant that created the link inside your system. If set, will only return links for the specified tenant. - in: query name: showArchived schema: default: false description: Whether to include archived links in the response. Defaults to `false` if not provided. type: boolean description: Whether to include archived links in the response. Defaults to `false` if not provided. - in: query name: withTags schema: default: false description: DEPRECATED. Filter for links that have at least one tag assigned to them. deprecated: true type: boolean description: DEPRECATED. Filter for links that have at least one tag assigned to them. - in: query name: endingBefore schema: description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. example: link_1KAP4CDPBSVMMBMH9XX3YZZ0Z... type: string description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. - in: query name: startingAfter schema: description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. example: link_1KAP4CDPBSVMMBMH9XX3YZZ0Z... type: string description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. - in: query name: page schema: description: DEPRECATED. Use `startingAfter` instead. example: 1 deprecated: true type: number minimum: 0 exclusiveMinimum: true description: DEPRECATED. Use `startingAfter` instead. - in: query name: pageSize schema: default: 100 description: The number of items per page. example: 50 type: number minimum: 0 exclusiveMinimum: true maximum: 100 description: The number of items per page. responses: '200': description: A list of links content: application/json: schema: type: array items: $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' /links/count: get: operationId: getLinksCount x-speakeasy-name-override: count summary: Retrieve links count description: Retrieve the number of links for the authenticated workspace. tags: - Links security: - token: [] parameters: - in: query name: domain schema: description: The domain to filter the links by. E.g. `ac.me`. If not provided, all links for the workspace will be returned. type: string description: The domain to filter the links by. E.g. `ac.me`. If not provided, all links for the workspace will be returned. - in: query name: tagId schema: description: 'Deprecated: Use `tagIds` instead. The tag ID to filter the links by.' deprecated: true type: string description: 'Deprecated: Use `tagIds` instead. The tag ID to filter the links by.' - in: query name: tagIds schema: description: The tag IDs to filter the links by. anyOf: - type: string - type: array items: type: string style: form explode: false description: The tag IDs to filter the links by. - in: query name: tagNames schema: description: The unique name of the tags assigned to the short link (case insensitive). anyOf: - type: string - type: array items: type: string style: form explode: false description: The unique name of the tags assigned to the short link (case insensitive). - in: query name: folderId schema: description: The folder ID to filter the links by. type: string description: The folder ID to filter the links by. - in: query name: search schema: description: The search term to filter the links by. The search term will be matched against the short link slug and the destination url. type: string description: The search term to filter the links by. The search term will be matched against the short link slug and the destination url. - in: query name: userId schema: description: The user ID to filter the links by. type: string description: The user ID to filter the links by. - in: query name: tenantId schema: description: The ID of the tenant that created the link inside your system. If set, will only return links for the specified tenant. type: string description: The ID of the tenant that created the link inside your system. If set, will only return links for the specified tenant. - in: query name: showArchived schema: default: false description: Whether to include archived links in the response. Defaults to `false` if not provided. type: boolean description: Whether to include archived links in the response. Defaults to `false` if not provided. - in: query name: withTags schema: default: false description: DEPRECATED. Filter for links that have at least one tag assigned to them. deprecated: true type: boolean description: DEPRECATED. Filter for links that have at least one tag assigned to them. - in: query name: groupBy schema: description: The field to group the links by. anyOf: - type: string enum: - domain - type: string enum: - tagId - type: string enum: - userId - type: string enum: - folderId description: The field to group the links by. responses: '200': description: A list of links content: application/json: schema: type: number description: The number of links matching the query. '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' /links/info: get: operationId: getLinkInfo x-speakeasy-name-override: get summary: Retrieve a link description: Retrieve the info for a link. tags: - Links security: - token: [] parameters: - in: query name: domain schema: type: string minLength: 1 description: The domain of the link to retrieve. E.g. for `d.to/github`, the domain is `d.to`. - in: query name: key schema: type: string minLength: 1 description: The key of the link to retrieve. E.g. for `d.to/github`, the key is `github`. - in: query name: linkId schema: description: The unique ID of the short link. example: clux0rgak00011... type: string description: The unique ID of the short link. - in: query name: externalId schema: description: This is the ID of the link in the your database. example: '123456' type: string description: This is the ID of the link in the your database. responses: '200': description: The retrieved 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' /links/{linkId}: patch: operationId: updateLink x-speakeasy-name-override: update x-speakeasy-max-method-params: 2 summary: Update a link description: Update a link for the authenticated workspace. If there's no change, returns it as it is. tags: - Links security: - token: [] parameters: - in: path name: linkId schema: type: string description: The id of the link to update. You may use either `linkId` (obtained via `/links/info` endpoint) or `externalId` prefixed with `ext_`. required: true description: The id of the link to update. You may use either `linkId` (obtained via `/links/info` endpoint) or `externalId` prefixed with `ext_`. requestBody: content: application/json: schema: type: object properties: url: description: The destination URL of the short link. example: https://google.com maxLength: 32000 type: string domain: description: The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains). type: string maxLength: 190 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 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 programId: description: The ID of the program the short link is associated with. nullable: true type: string partnerId: description: The ID of the partner the short link is associated with. nullable: true type: string trackConversion: description: Whether to track conversions for the short link. Defaults to `false` if not provided. type: boolean 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 folderId: description: The unique ID existing folder to assign the short link to. nullable: true 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: nullable: true anyOf: - type: string pattern: ^data:image\/(png|jpeg|jpg|gif|webp);base64, - type: string format: uri 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 geo: allOf: - $ref: '#/components/schemas/linkGeoTargeting' doIndex: description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex' type: boolean utm_source: description: The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. nullable: true type: string utm_medium: description: The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. nullable: true type: string utm_campaign: description: The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. nullable: true type: string utm_term: description: The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. nullable: true type: string utm_content: description: The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. nullable: true type: string ref: description: The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. nullable: true type: string webhookIds: description: An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. nullable: true type: array items: 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 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 publicStats: description: 'Deprecated: Use `dashboard` instead. Whether the short link''s stats are publicly accessible. Defaults to `false` if not provided.' deprecated: true type: boolean tagId: description: 'Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link.' deprecated: true nullable: true type: string responses: '200': description: The updated 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' delete: operationId: deleteLink x-speakeasy-name-override: delete x-speakeasy-max-method-params: 1 summary: Delete a link description: Delete a link for the authenticated workspace. tags: - Links security: - token: [] parameters: - in: path name: linkId schema: type: string description: The id of the link to delete. You may use either `linkId` (obtained via `/links/info` endpoint) or `externalId` prefixed with `ext_`. required: true description: The id of the link to delete. You may use either `linkId` (obtained via `/links/info` endpoint) or `externalId` prefixed with `ext_`. responses: '200': description: The deleted link ID. content: application/json: schema: type: object properties: id: type: string description: The ID of the link. required: - id 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' /links/bulk: post: operationId: bulkCreateLinks x-speakeasy-name-override: createMany summary: Bulk create links description: Bulk create up to 100 links for the authenticated workspace. tags: - Links security: - token: [] requestBody: content: application/json: schema: type: array items: type: object properties: url: description: The destination URL of the short link. example: https://google.com maxLength: 32000 type: string domain: description: The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains). type: string maxLength: 190 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 keyLength: description: The length of the short link slug. Defaults to 7 if not provided. When used with `prefix`, the total length of the key will be `prefix.length + keyLength`. type: number minimum: 3 maximum: 190 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 programId: description: The ID of the program the short link is associated with. nullable: true type: string partnerId: description: The ID of the partner the short link is associated with. nullable: true type: string prefix: description: The prefix of the short link slug for randomly-generated keys (e.g. if prefix is `/c/`, generated keys will be in the `/c/:key` format). Will be ignored if `key` is provided. type: string trackConversion: description: Whether to track conversions for the short link. Defaults to `false` if not provided. type: boolean 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 folderId: description: The unique ID existing folder to assign the short link to. nullable: true 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 geo: $ref: '#/components/schemas/linkGeoTargeting' doIndex: description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex' type: boolean utm_source: description: The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. nullable: true type: string utm_medium: description: The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. nullable: true type: string utm_campaign: description: The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. nullable: true type: string utm_term: description: The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. nullable: true type: string utm_content: description: The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. nullable: true type: string ref: description: The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. nullable: true type: string webhookIds: description: An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. nullable: true type: array items: 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 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 publicStats: description: 'Deprecated: Use `dashboard` instead. Whether the short link''s stats are publicly accessible. Defaults to `false` if not provided.' deprecated: true type: boolean tagId: description: 'Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link.' deprecated: true nullable: true type: string required: - url responses: '200': description: The created links content: application/json: schema: type: array items: oneOf: - $ref: '#/components/schemas/LinkSchema' - $ref: '#/components/schemas/LinkErrorSchema' '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' patch: operationId: bulkUpdateLinks x-speakeasy-name-override: updateMany summary: Bulk update links description: Bulk update up to 100 links with the same data for the authenticated workspace. tags: - Links security: - token: [] requestBody: content: application/json: schema: type: object properties: linkIds: default: [] maxItems: 100 type: array items: type: string description: The IDs of the links to update. Takes precedence over `externalIds`. externalIds: default: [] maxItems: 100 type: array items: type: string description: The external IDs of the links to update as stored in your database. data: type: object properties: url: description: The destination URL of the short link. example: https://google.com type: string maxLength: 32000 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 programId: description: The ID of the program the short link is associated with. nullable: true type: string partnerId: description: The ID of the partner the short link is associated with. nullable: true type: string trackConversion: description: Whether to track conversions for the short link. Defaults to `false` if not provided. type: boolean 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 folderId: description: The unique ID existing folder to assign the short link to. nullable: true 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 geo: $ref: '#/components/schemas/linkGeoTargeting' doIndex: description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex' type: boolean utm_source: description: The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. nullable: true type: string utm_medium: description: The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. nullable: true type: string utm_campaign: description: The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. nullable: true type: string utm_term: description: The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. nullable: true type: string utm_content: description: The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. nullable: true type: string ref: description: The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. nullable: true type: string webhookIds: description: An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. nullable: true type: array items: 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 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 publicStats: description: 'Deprecated: Use `dashboard` instead. Whether the short link''s stats are publicly accessible. Defaults to `false` if not provided.' deprecated: true type: boolean tagId: description: 'Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link.' deprecated: true nullable: true type: string required: - data responses: '200': description: The updated links content: application/json: schema: type: array items: $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' delete: operationId: bulkDeleteLinks x-speakeasy-name-override: deleteMany summary: Bulk delete links description: Bulk delete up to 100 links for the authenticated workspace. tags: - Links security: - token: [] parameters: - in: query name: linkIds schema: type: array items: type: string example: - clux0rgak00011... - clux0rgak00022... description: Comma-separated list of link IDs to delete. Maximum of 100 IDs. Non-existing IDs will be ignored. explode: false style: form required: true description: Comma-separated list of link IDs to delete. Maximum of 100 IDs. Non-existing IDs will be ignored. responses: '200': description: The deleted links count. content: application/json: schema: type: object properties: deletedCount: type: number description: The number of links deleted. required: - deletedCount 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' /links/upsert: put: operationId: upsertLink x-speakeasy-name-override: upsert x-speakeasy-usage-example: true summary: Upsert a link description: Upsert a link for the authenticated workspace by its URL. 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: - Links security: - token: [] requestBody: content: application/json: schema: type: object properties: url: description: The destination URL of the short link. example: https://google.com maxLength: 32000 type: string domain: description: The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains). type: string maxLength: 190 key: description: The short link slug. If not provided, a random 7-character slug will be generated. type: string maxLength: 190 keyLength: description: The length of the short link slug. Defaults to 7 if not provided. When used with `prefix`, the total length of the key will be `prefix.length + keyLength`. type: number minimum: 3 maximum: 190 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 programId: description: The ID of the program the short link is associated with. nullable: true type: string partnerId: description: The ID of the partner the short link is associated with. nullable: true type: string prefix: description: The prefix of the short link slug for randomly-generated keys (e.g. if prefix is `/c/`, generated keys will be in the `/c/:key` format). Will be ignored if `key` is provided. type: string trackConversion: description: Whether to track conversions for the short link. Defaults to `false` if not provided. type: boolean 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 folderId: description: The unique ID existing folder to assign the short link to. nullable: true 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 geo: $ref: '#/components/schemas/linkGeoTargeting' doIndex: description: 'Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex' type: boolean utm_source: description: The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. nullable: true type: string utm_medium: description: The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. nullable: true type: string utm_campaign: description: The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. nullable: true type: string utm_term: description: The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. nullable: true type: string utm_content: description: The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. nullable: true type: string ref: description: The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. nullable: true type: string webhookIds: description: An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. nullable: true type: array items: 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 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 publicStats: description: 'Deprecated: Use `dashboard` instead. Whether the short link''s stats are publicly accessible. Defaults to `false` if not provided.' deprecated: true type: boolean tagId: description: 'Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link.' deprecated: true nullable: true type: string required: - url responses: '200': description: The upserted 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' /analytics: get: operationId: retrieveAnalytics x-speakeasy-name-override: retrieve summary: Retrieve analytics for a link, a domain, or the authenticated workspace. description: Retrieve analytics for a link, a domain, or the authenticated workspace. The response type depends on the `event` and `type` query parameters. tags: - Analytics security: - token: [] parameters: - in: query name: event schema: default: clicks description: The type of event to retrieve analytics for. Defaults to `clicks`. example: leads type: string enum: - clicks - leads - sales - composite description: The type of event to retrieve analytics for. Defaults to `clicks`. - 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: - count - timeseries - continents - regions - countries - cities - devices - browsers - os - trigger - triggers - referers - referer_urls - top_folders - top_link_tags - top_domains - top_links - top_urls - top_base_urls - top_partners - top_groups - top_partner_tags - utm_sources - utm_mediums - utm_campaigns - utm_terms - utm_contents description: The parameter to group the analytics data points by. Defaults to `count` if undefined. - in: query name: domain schema: description: 'The domain to filter analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `dub.co`, `dub.co,google.com`, `-spam.com`.' example: dub.co type: string description: 'The domain to filter analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `dub.co`, `dub.co,google.com`, `-spam.com`.' - in: query name: key schema: description: The slug of the short link to retrieve analytics for. Must be used along with the corresponding `domain` of the short link to fetch analytics for a specific short link. type: string description: The slug of the short link to retrieve analytics for. Must be used along with the corresponding `domain` of the short link to fetch analytics for a specific short link. - in: query name: linkId schema: description: 'The unique ID of the link to retrieve analytics for.Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `link_123`, `link_123,link_456`, `-link_789`.' type: string description: 'The unique ID of the link to retrieve analytics for.Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `link_123`, `link_123,link_456`, `-link_789`.' - in: query name: externalId schema: description: The ID of the link in the your database. Must be prefixed with 'ext_' when passed as a query parameter. type: string description: The ID of the link in the your database. Must be prefixed with 'ext_' when passed as a query parameter. - in: query name: tenantId schema: description: 'The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`.' type: string description: 'The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`.' - in: query name: tagId schema: description: 'The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.' type: string description: 'The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.' - in: query name: folderId schema: description: 'The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.' type: string description: 'The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.' - in: query name: partnerTagId schema: description: 'The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.' type: string description: 'The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.' - in: query name: groupId schema: description: 'The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.' type: string description: 'The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.' - in: query name: partnerId schema: description: 'The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`.' type: string description: 'The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`.' - in: query name: customerId schema: description: The ID of the customer to retrieve analytics for. type: string description: The ID of the customer to retrieve analytics for. - 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: country schema: description: 'The country to retrieve analytics for. Must be passed as a 2-letter ISO 3166-1 country code (see https://d.to/geo). Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `US`, `US,BR,FR`, `-US`.' type: string description: 'The country to retrieve analytics for. Must be passed as a 2-letter ISO 3166-1 country code (see https://d.to/geo). Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `US`, `US,BR,FR`, `-US`.' - in: query name: city schema: description: 'The city to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `New York`, `New York,London`, `-New York`.' type: string description: 'The city to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `New York`, `New York,London`, `-New York`.' - in: query name: region schema: description: 'The ISO 3166-2 region code to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NY`, `NY,CA`, `-NY`.' type: string description: 'The ISO 3166-2 region code to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NY`, `NY,CA`, `-NY`.' - in: query name: continent schema: description: 'The continent to retrieve analytics for. Valid values: AF, AN, AS, EU, NA, OC, SA. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NA`, `NA,EU`, `-AS`.' type: string description: 'The continent to retrieve analytics for. Valid values: AF, AN, AS, EU, NA, OC, SA. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NA`, `NA,EU`, `-AS`.' - in: query name: device schema: description: 'The device to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Desktop`, `Mobile,Tablet`, `-Mobile`.' type: string description: 'The device to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Desktop`, `Mobile,Tablet`, `-Mobile`.' - in: query name: browser schema: description: 'The browser to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Chrome`, `Chrome,Firefox,Safari`, `-IE`.' type: string description: 'The browser to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Chrome`, `Chrome,Firefox,Safari`, `-IE`.' - in: query name: os schema: description: 'The OS to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Windows`, `Mac,Windows,Linux`, `-Windows`.' type: string description: 'The OS to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Windows`, `Mac,Windows,Linux`, `-Windows`.' - in: query name: trigger schema: description: 'The trigger to retrieve analytics for. Valid values: qr, link, pageview. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `qr`, `qr,link`, `-qr`. If undefined, returns all trigger types.' type: string description: 'The trigger to retrieve analytics for. Valid values: qr, link, pageview. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `qr`, `qr,link`, `-qr`. If undefined, returns all trigger types.' - in: query name: referer schema: description: 'The referer hostname to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google.com`, `google.com,twitter.com`, `-facebook.com`.' type: string description: 'The referer hostname to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google.com`, `google.com,twitter.com`, `-facebook.com`.' - in: query name: refererUrl schema: description: 'The full referer URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://google.com`, `https://google.com,https://twitter.com`, `-https://spam.com`.' type: string description: 'The full referer URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://google.com`, `https://google.com,https://twitter.com`, `-https://spam.com`.' - in: query name: url schema: description: 'The destination URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://example.com`, `https://example.com,https://other.com`, `-https://spam.com`.' type: string description: 'The destination URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://example.com`, `https://example.com,https://other.com`, `-https://spam.com`.' - in: query name: utm_source schema: description: 'The UTM source to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google`, `google,twitter`, `-spam`.' type: string description: 'The UTM source to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google`, `google,twitter`, `-spam`.' - in: query name: utm_medium schema: description: 'The UTM medium to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `cpc`, `cpc,social`, `-email`.' type: string description: 'The UTM medium to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `cpc`, `cpc,social`, `-email`.' - in: query name: utm_campaign schema: description: 'The UTM campaign to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `summer_sale`, `summer_sale,winter_sale`, `-old_campaign`.' type: string description: 'The UTM campaign to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `summer_sale`, `summer_sale,winter_sale`, `-old_campaign`.' - in: query name: utm_term schema: description: 'The UTM term to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' type: string description: 'The UTM term to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' - in: query name: utm_content schema: description: 'The UTM content to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' type: string description: 'The UTM content to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' - in: query name: root schema: description: Filter for root domains. If true, filter for domains only. If false, filter for links only. If undefined, return both. type: boolean description: Filter for root domains. If true, filter for domains only. If false, filter for links only. If undefined, return both. - in: query name: saleType schema: description: 'Filter sales by type: ''new'' for first-time purchases, ''recurring'' for repeat purchases. If undefined, returns both.' type: string enum: - new - recurring description: 'Filter sales by type: ''new'' for first-time purchases, ''recurring'' for repeat purchases. If undefined, returns both.' - 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: programId schema: description: 'Deprecated: This is automatically inferred from your workspace''s defaultProgramId. The ID of the program to retrieve analytics for.' deprecated: true type: string description: 'Deprecated: This is automatically inferred from your workspace''s defaultProgramId. The ID of the program to retrieve analytics for.' - in: query name: tagIds schema: description: 'Deprecated: Use `tagId` instead. The tag IDs to retrieve analytics for.' deprecated: true type: string description: 'Deprecated: Use `tagId` instead. The tag IDs to retrieve analytics for.' - in: query name: qr schema: description: 'Deprecated: Use the `trigger` field instead. Filter for QR code scans. If true, filter for QR codes only. If false, filter for links only. If undefined, return both.' deprecated: true type: boolean description: 'Deprecated: Use the `trigger` field instead. Filter for QR code scans. If true, filter for QR codes only. If false, filter for links only. If undefined, return both.' responses: '200': description: Analytics data content: application/json: schema: anyOf: - $ref: '#/components/schemas/AnalyticsCount' - type: array items: $ref: '#/components/schemas/AnalyticsTimeseries' - type: array items: $ref: '#/components/schemas/AnalyticsContinents' - type: array items: $ref: '#/components/schemas/AnalyticsCountries' - type: array items: $ref: '#/components/schemas/AnalyticsRegions' - type: array items: $ref: '#/components/schemas/AnalyticsCities' - type: array items: $ref: '#/components/schemas/AnalyticsDevices' - type: array items: $ref: '#/components/schemas/AnalyticsBrowsers' - type: array items: $ref: '#/components/schemas/AnalyticsOS' - type: array items: $ref: '#/components/schemas/AnalyticsTriggers' - type: array items: $ref: '#/components/schemas/AnalyticsReferers' - type: array items: $ref: '#/components/schemas/AnalyticsRefererUrls' - type: array items: $ref: '#/components/schemas/AnalyticsTopLinks' - type: array items: $ref: '#/components/schemas/AnalyticsTopUrls' '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' /events: get: operationId: listEvents x-speakeasy-name-override: list summary: List all events description: Retrieve a paginated list of events for the authenticated workspace. tags: - Events security: - token: [] parameters: - in: query name: event schema: default: clicks description: The type of event to retrieve analytics for. Defaults to 'clicks'. type: string enum: - clicks - leads - sales description: The type of event to retrieve analytics for. Defaults to 'clicks'. - in: query name: domain schema: description: 'The domain to filter analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `dub.co`, `dub.co,google.com`, `-spam.com`.' example: dub.co type: string description: 'The domain to filter analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `dub.co`, `dub.co,google.com`, `-spam.com`.' - in: query name: key schema: description: The slug of the short link to retrieve analytics for. Must be used along with the corresponding `domain` of the short link to fetch analytics for a specific short link. type: string description: The slug of the short link to retrieve analytics for. Must be used along with the corresponding `domain` of the short link to fetch analytics for a specific short link. - in: query name: linkId schema: description: 'The unique ID of the link to retrieve analytics for.Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `link_123`, `link_123,link_456`, `-link_789`.' type: string description: 'The unique ID of the link to retrieve analytics for.Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `link_123`, `link_123,link_456`, `-link_789`.' - in: query name: externalId schema: description: The ID of the link in the your database. Must be prefixed with 'ext_' when passed as a query parameter. type: string description: The ID of the link in the your database. Must be prefixed with 'ext_' when passed as a query parameter. - in: query name: tenantId schema: description: 'The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`.' type: string description: 'The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`.' - in: query name: tagId schema: description: 'The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.' type: string description: 'The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.' - in: query name: folderId schema: description: 'The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.' type: string description: 'The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.' - in: query name: partnerTagId schema: description: 'The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.' type: string description: 'The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.' - in: query name: groupId schema: description: 'The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.' type: string description: 'The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.' - in: query name: partnerId schema: description: 'The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`.' type: string description: 'The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`.' - in: query name: customerId schema: description: The ID of the customer to retrieve analytics for. type: string description: The ID of the customer to retrieve analytics for. - 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: country schema: description: 'The country to retrieve analytics for. Must be passed as a 2-letter ISO 3166-1 country code (see https://d.to/geo). Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `US`, `US,BR,FR`, `-US`.' type: string description: 'The country to retrieve analytics for. Must be passed as a 2-letter ISO 3166-1 country code (see https://d.to/geo). Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `US`, `US,BR,FR`, `-US`.' - in: query name: city schema: description: 'The city to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `New York`, `New York,London`, `-New York`.' type: string description: 'The city to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `New York`, `New York,London`, `-New York`.' - in: query name: region schema: description: 'The ISO 3166-2 region code to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NY`, `NY,CA`, `-NY`.' type: string description: 'The ISO 3166-2 region code to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NY`, `NY,CA`, `-NY`.' - in: query name: continent schema: description: 'The continent to retrieve analytics for. Valid values: AF, AN, AS, EU, NA, OC, SA. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NA`, `NA,EU`, `-AS`.' type: string description: 'The continent to retrieve analytics for. Valid values: AF, AN, AS, EU, NA, OC, SA. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `NA`, `NA,EU`, `-AS`.' - in: query name: device schema: description: 'The device to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Desktop`, `Mobile,Tablet`, `-Mobile`.' type: string description: 'The device to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Desktop`, `Mobile,Tablet`, `-Mobile`.' - in: query name: browser schema: description: 'The browser to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Chrome`, `Chrome,Firefox,Safari`, `-IE`.' type: string description: 'The browser to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Chrome`, `Chrome,Firefox,Safari`, `-IE`.' - in: query name: os schema: description: 'The OS to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Windows`, `Mac,Windows,Linux`, `-Windows`.' type: string description: 'The OS to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `Windows`, `Mac,Windows,Linux`, `-Windows`.' - in: query name: trigger schema: description: 'The trigger to retrieve analytics for. Valid values: qr, link, pageview. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `qr`, `qr,link`, `-qr`. If undefined, returns all trigger types.' type: string description: 'The trigger to retrieve analytics for. Valid values: qr, link, pageview. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `qr`, `qr,link`, `-qr`. If undefined, returns all trigger types.' - in: query name: referer schema: description: 'The referer hostname to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google.com`, `google.com,twitter.com`, `-facebook.com`.' type: string description: 'The referer hostname to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google.com`, `google.com,twitter.com`, `-facebook.com`.' - in: query name: refererUrl schema: description: 'The full referer URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://google.com`, `https://google.com,https://twitter.com`, `-https://spam.com`.' type: string description: 'The full referer URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://google.com`, `https://google.com,https://twitter.com`, `-https://spam.com`.' - in: query name: url schema: description: 'The destination URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://example.com`, `https://example.com,https://other.com`, `-https://spam.com`.' type: string description: 'The destination URL to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `https://example.com`, `https://example.com,https://other.com`, `-https://spam.com`.' - in: query name: utm_source schema: description: 'The UTM source to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google`, `google,twitter`, `-spam`.' type: string description: 'The UTM source to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `google`, `google,twitter`, `-spam`.' - in: query name: utm_medium schema: description: 'The UTM medium to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `cpc`, `cpc,social`, `-email`.' type: string description: 'The UTM medium to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `cpc`, `cpc,social`, `-email`.' - in: query name: utm_campaign schema: description: 'The UTM campaign to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `summer_sale`, `summer_sale,winter_sale`, `-old_campaign`.' type: string description: 'The UTM campaign to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `summer_sale`, `summer_sale,winter_sale`, `-old_campaign`.' - in: query name: utm_term schema: description: 'The UTM term to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' type: string description: 'The UTM term to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' - in: query name: utm_content schema: description: 'The UTM content to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' type: string description: 'The UTM content to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`).' - in: query name: root schema: description: Filter for root domains. If true, filter for domains only. If false, filter for links only. If undefined, return both. type: boolean description: Filter for root domains. If true, filter for domains only. If false, filter for links only. If undefined, return both. - in: query name: saleType schema: description: 'Filter sales by type: ''new'' for first-time purchases, ''recurring'' for repeat purchases. If undefined, returns both.' type: string enum: - new - recurring description: 'Filter sales by type: ''new'' for first-time purchases, ''recurring'' for repeat purchases. If undefined, returns both.' - 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: programId schema: description: 'Deprecated: This is automatically inferred from your workspace''s defaultProgramId. The ID of the program to retrieve analytics for.' deprecated: true type: string description: 'Deprecated: This is automatically inferred from your workspace''s defaultProgramId. The ID of the program to retrieve analytics for.' - in: query name: tagIds schema: description: 'Deprecated: Use `tagId` instead. The tag IDs to retrieve analytics for.' deprecated: true type: string description: 'Deprecated: Use `tagId` instead. The tag IDs to retrieve analytics for.' - in: query name: qr schema: description: 'Deprecated: Use the `trigger` field instead. Filter for QR code scans. If true, filter for QR codes only. If false, filter for links only. If undefined, return both.' deprecated: true type: boolean description: 'Deprecated: Use the `trigger` field instead. Filter for QR code scans. If true, filter for QR codes only. If false, filter for links only. If undefined, return both.' - in: query name: page schema: default: 1 type: number - in: query name: limit schema: default: 100 type: number maximum: 1000 - in: query name: sortOrder schema: description: The sort order. The default is `desc`. default: desc type: string enum: - asc - desc description: The sort order. The default is `desc`. - in: query name: sortBy schema: default: timestamp description: The field to sort the events by. The default is `timestamp`. type: string enum: - timestamp description: The field to sort the events by. The default is `timestamp`. - in: query name: order schema: description: DEPRECATED. Use `sortOrder` instead. deprecated: true default: desc type: string enum: - asc - desc description: DEPRECATED. Use `sortOrder` instead. responses: '200': description: A list of events content: application/json: schema: type: array items: oneOf: - type: object properties: event: type: string enum: - click timestamp: type: string click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip additionalProperties: false link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - clicks - leads - conversions - sales - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId additionalProperties: false click_id: type: string deprecated: true description: 'Deprecated: Use `click.id` instead.' link_id: type: string deprecated: true description: 'Deprecated: Use `link.id` instead.' domain: type: string deprecated: true description: 'Deprecated: Use `link.domain` instead.' key: type: string deprecated: true description: 'Deprecated: Use `link.key` instead.' url: type: string deprecated: true description: 'Deprecated: Use `click.url` instead.' continent: type: string deprecated: true description: 'Deprecated: Use `click.continent` instead.' country: type: string deprecated: true description: 'Deprecated: Use `click.country` instead.' city: type: string deprecated: true description: 'Deprecated: Use `click.city` instead.' device: type: string deprecated: true description: 'Deprecated: Use `click.device` instead.' browser: type: string deprecated: true description: 'Deprecated: Use `click.browser` instead.' os: type: string deprecated: true description: 'Deprecated: Use `click.os` instead.' qr: type: number deprecated: true description: 'Deprecated: Use `click.qr` instead.' ip: type: string deprecated: true description: 'Deprecated: Use `click.ip` instead.' required: - event - timestamp - click - link - click_id - link_id - domain - key - url - continent - country - city - device - browser - os - qr - ip additionalProperties: false title: ClickEvent - type: object properties: event: type: string enum: - lead timestamp: type: string eventId: type: string eventName: type: string metadata: nullable: true click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip additionalProperties: false link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - clicks - leads - conversions - sales - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId additionalProperties: false customer: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt additionalProperties: false click_id: type: string deprecated: true description: 'Deprecated: Use `click.id` instead.' link_id: type: string deprecated: true description: 'Deprecated: Use `link.id` instead.' domain: type: string deprecated: true description: 'Deprecated: Use `link.domain` instead.' key: type: string deprecated: true description: 'Deprecated: Use `link.key` instead.' url: type: string deprecated: true description: 'Deprecated: Use `click.url` instead.' continent: type: string deprecated: true description: 'Deprecated: Use `click.continent` instead.' country: type: string deprecated: true description: 'Deprecated: Use `click.country` instead.' city: type: string deprecated: true description: 'Deprecated: Use `click.city` instead.' device: type: string deprecated: true description: 'Deprecated: Use `click.device` instead.' browser: type: string deprecated: true description: 'Deprecated: Use `click.browser` instead.' os: type: string deprecated: true description: 'Deprecated: Use `click.os` instead.' qr: type: number deprecated: true description: 'Deprecated: Use `click.qr` instead.' ip: type: string deprecated: true description: 'Deprecated: Use `click.ip` instead.' required: - event - timestamp - eventId - eventName - click - link - customer - click_id - link_id - domain - key - url - continent - country - city - device - browser - os - qr - ip additionalProperties: false title: LeadEvent - type: object properties: event: type: string enum: - sale timestamp: type: string eventId: type: string eventName: type: string sale: type: object properties: amount: type: integer minimum: 0 maximum: 9007199254740991 description: 'The amount of the sale in cents (for all two-decimal currencies). If the sale is in a zero-decimal currency, pass the full integer value (e.g. `1580` JPY). Learn more: https://d.to/currency' invoiceId: default: null description: The invoice ID of the sale. Can be used as a idempotency key – only one sale event can be recorded for a given invoice ID. nullable: true type: string paymentProcessor: default: custom description: The payment processor via which the sale was made. type: string enum: - stripe - shopify - polar - paddle - apple - revenuecat - dub - custom currency: description: 'The currency of the sale. Accepts ISO 4217 currency codes. Sales will be automatically converted and stored as USD at the latest exchange rates. Learn more: https://d.to/currency' required: - amount - invoiceId - paymentProcessor - currency additionalProperties: false metadata: nullable: true link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - clicks - leads - conversions - sales - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId additionalProperties: false click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip additionalProperties: false customer: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt additionalProperties: false saleAmount: description: 'Deprecated: Use `sale.amount` instead.' deprecated: true type: number invoice_id: type: string description: 'Deprecated: Use `sale.invoiceId` instead.' deprecated: true payment_processor: type: string description: 'Deprecated: Use `sale.paymentProcessor` instead.' deprecated: true click_id: type: string deprecated: true description: 'Deprecated: Use `click.id` instead.' link_id: type: string deprecated: true description: 'Deprecated: Use `link.id` instead.' domain: type: string deprecated: true description: 'Deprecated: Use `link.domain` instead.' key: type: string deprecated: true description: 'Deprecated: Use `link.key` instead.' url: type: string deprecated: true description: 'Deprecated: Use `click.url` instead.' continent: type: string deprecated: true description: 'Deprecated: Use `click.continent` instead.' country: type: string deprecated: true description: 'Deprecated: Use `click.country` instead.' city: type: string deprecated: true description: 'Deprecated: Use `click.city` instead.' device: type: string deprecated: true description: 'Deprecated: Use `click.device` instead.' browser: type: string deprecated: true description: 'Deprecated: Use `click.browser` instead.' os: type: string deprecated: true description: 'Deprecated: Use `click.os` instead.' qr: type: number deprecated: true description: 'Deprecated: Use `click.qr` instead.' ip: type: string deprecated: true description: 'Deprecated: Use `click.ip` instead.' required: - event - timestamp - eventId - eventName - sale - link - click - customer - saleAmount - invoice_id - payment_processor - click_id - link_id - domain - key - url - continent - country - city - device - browser - os - qr - ip additionalProperties: false title: SaleEvent type: object '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' /tags: post: operationId: createTag x-speakeasy-name-override: create summary: Create a tag description: Create a tag for the authenticated workspace. tags: - Tags security: - token: [] requestBody: content: application/json: schema: type: object properties: name: type: string minLength: 1 maxLength: 50 description: The name of the tag to create. color: type: string enum: - red - yellow - green - blue - purple - brown - gray - pink description: 'The color of the tag. If not provided, a random color will be used from the list: red, yellow, green, blue, purple, brown, gray.' tag: type: string minLength: 1 description: The name of the tag to create. deprecated: true responses: '201': description: The created tag content: application/json: schema: $ref: '#/components/schemas/LinkTagSchemaOutput' '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: getTags x-speakeasy-name-override: list summary: List all tags description: Retrieve a paginated list of tags for the authenticated workspace. tags: - Tags security: - token: [] parameters: - in: query name: sortBy schema: default: name description: The field to sort the tags by. type: string enum: - name - createdAt description: The field to sort the tags by. - in: query name: sortOrder schema: default: asc description: The order to sort the tags by. type: string enum: - asc - desc description: The order to sort the tags by. - in: query name: search schema: description: The search term to filter the tags by. type: string description: The search term to filter the tags by. - in: query name: ids schema: description: IDs of tags to filter by. anyOf: - type: string - type: array items: type: string description: IDs of tags to filter by. - 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: A list of tags content: application/json: schema: type: array items: $ref: '#/components/schemas/LinkTagSchemaOutput' '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' /tags/{id}: patch: operationId: updateTag x-speakeasy-name-override: update x-speakeasy-max-method-params: 2 summary: Update a tag description: Update a tag in the workspace. tags: - Tags security: - token: [] parameters: - in: path name: id schema: type: string description: The ID of the tag to update. required: true description: The ID of the tag to update. requestBody: content: application/json: schema: type: object properties: name: type: string minLength: 1 maxLength: 50 description: The name of the tag to create. color: type: string enum: - red - yellow - green - blue - purple - brown - gray - pink description: 'The color of the tag. If not provided, a random color will be used from the list: red, yellow, green, blue, purple, brown, gray.' tag: type: string minLength: 1 description: The name of the tag to create. deprecated: true responses: '200': description: The updated tag. content: application/json: schema: $ref: '#/components/schemas/LinkTagSchemaOutput' '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' delete: operationId: deleteTag x-speakeasy-name-override: delete x-speakeasy-max-method-params: 1 summary: Delete a tag description: Delete a tag from the workspace. All existing links will still work, but they will no longer be associated with this tag. tags: - Tags security: - token: [] parameters: - in: path name: id schema: type: string description: The ID of the tag to delete. required: true description: The ID of the tag to delete. responses: '200': description: The deleted tag ID. content: application/json: schema: type: object properties: id: type: string description: The ID of the deleted tag. required: - id 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' /folders: post: operationId: createFolder x-speakeasy-name-override: create summary: Create a folder description: Create a folder for the authenticated workspace. tags: - Folders security: - token: [] requestBody: content: application/json: schema: type: object properties: name: type: string maxLength: 190 description: The name of the folder. description: description: The description of the folder. nullable: true type: string maxLength: 500 accessLevel: default: null description: The access level of the folder within the workspace. nullable: true type: string enum: - write - read required: - name responses: '201': description: The created folder content: application/json: schema: $ref: '#/components/schemas/FolderSchema' '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: listFolders x-speakeasy-name-override: list summary: List all folders description: Retrieve a paginated list of folders for the authenticated workspace. tags: - Folders security: - token: [] parameters: - in: query name: search schema: description: The search term to filter the folders by. type: string description: The search term to filter the folders by. - 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: 50 description: The number of items per page. example: 50 type: number minimum: 0 exclusiveMinimum: true maximum: 50 description: The number of items per page. responses: '200': description: A list of folders content: application/json: schema: type: array items: $ref: '#/components/schemas/FolderSchema' '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' /folders/{id}: patch: operationId: updateFolder x-speakeasy-name-override: update x-speakeasy-max-method-params: 2 summary: Update a folder description: Update a folder in the workspace. tags: - Folders security: - token: [] parameters: - in: path name: id schema: type: string description: The ID of the folder to update. required: true description: The ID of the folder to update. requestBody: content: application/json: schema: type: object properties: name: type: string maxLength: 190 description: The name of the folder. description: description: The description of the folder. nullable: true type: string maxLength: 500 accessLevel: description: The access level of the folder within the workspace. nullable: true type: string enum: - write - read responses: '200': description: The updated folder. content: application/json: schema: $ref: '#/components/schemas/FolderSchema' '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' delete: operationId: deleteFolder x-speakeasy-name-override: delete x-speakeasy-max-method-params: 1 summary: Delete a folder description: Delete a folder from the workspace. All existing links will still work, but they will no longer be associated with this folder. tags: - Folders security: - token: [] parameters: - in: path name: id schema: type: string description: The ID of the folder to delete. required: true description: The ID of the folder to delete. responses: '200': description: The deleted folder ID. content: application/json: schema: type: object properties: id: type: string description: The ID of the deleted folder. required: - id 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' /domains: post: operationId: createDomain x-speakeasy-name-override: create summary: Create a domain description: Create a domain for the authenticated workspace. tags: - Domains security: - token: [] requestBody: content: application/json: schema: type: object properties: slug: type: string minLength: 1 maxLength: 190 description: Name of the domain. example: acme.com expiredUrl: description: Redirect users to a specific URL when any link under this domain has expired. example: https://acme.com/expired nullable: true type: string maxLength: 32000 notFoundUrl: description: Redirect users to a specific URL when a link under this domain doesn't exist. example: https://acme.com/not-found nullable: true type: string maxLength: 32000 archived: default: false description: Whether to archive this domain. `false` will unarchive a previously archived domain. example: false type: boolean placeholder: description: Provide context to your teammates in the link creation modal by showing them an example of a link to be shortened. example: https://dub.co/help/article/dub-links nullable: true type: string maxLength: 100 logo: description: The logo of the domain. nullable: true anyOf: - type: string pattern: ^data:image\/(png|jpeg|jpg|gif|webp);base64, - type: string format: uri - type: string format: uri assetLinks: description: assetLinks.json configuration file (for deep link support on Android). nullable: true type: string appleAppSiteAssociation: description: apple-app-site-association configuration file (for deep link support on iOS). nullable: true type: string required: - slug responses: '201': description: The domain was created. content: application/json: schema: $ref: '#/components/schemas/DomainSchema' '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: listDomains x-speakeasy-name-override: list x-speakeasy-pagination: type: offsetLimit inputs: - name: page in: parameters type: page - name: pageSize in: parameters type: limit outputs: results: $ summary: List all domains description: Retrieve a paginated list of domains for the authenticated workspace. tags: - Domains security: - token: [] parameters: - in: query name: archived schema: default: false description: Whether to include archived domains in the response. Defaults to `false` if not provided. type: boolean description: Whether to include archived domains in the response. Defaults to `false` if not provided. - in: query name: search schema: description: The search term to filter the domains by. type: string description: The search term to filter the domains by. - 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: 50 description: The number of items per page. example: 50 type: number minimum: 0 exclusiveMinimum: true maximum: 50 description: The number of items per page. responses: '200': description: The domains were retrieved. content: application/json: schema: type: array items: $ref: '#/components/schemas/DomainSchema' '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' /domains/{slug}: patch: operationId: updateDomain x-speakeasy-name-override: update x-speakeasy-max-method-params: 2 summary: Update a domain description: Update a domain for the authenticated workspace. tags: - Domains security: - token: [] parameters: - in: path name: slug schema: type: string description: The domain name. example: acme.com required: true description: The domain name. requestBody: content: application/json: schema: type: object properties: slug: type: string minLength: 1 maxLength: 190 description: Name of the domain. example: acme.com expiredUrl: description: Redirect users to a specific URL when any link under this domain has expired. example: https://acme.com/expired nullable: true type: string maxLength: 32000 notFoundUrl: description: Redirect users to a specific URL when a link under this domain doesn't exist. example: https://acme.com/not-found nullable: true type: string maxLength: 32000 archived: default: false description: Whether to archive this domain. `false` will unarchive a previously archived domain. example: false type: boolean placeholder: description: Provide context to your teammates in the link creation modal by showing them an example of a link to be shortened. example: https://dub.co/help/article/dub-links nullable: true type: string maxLength: 100 logo: description: The logo of the domain. nullable: true anyOf: - type: string pattern: ^data:image\/(png|jpeg|jpg|gif|webp);base64, - type: string format: uri - type: string format: uri assetLinks: description: assetLinks.json configuration file (for deep link support on Android). nullable: true type: string appleAppSiteAssociation: description: apple-app-site-association configuration file (for deep link support on iOS). nullable: true type: string responses: '200': description: The domain was updated. content: application/json: schema: $ref: '#/components/schemas/DomainSchema' '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' delete: operationId: deleteDomain x-speakeasy-name-override: delete x-speakeasy-max-method-params: 1 summary: Delete a domain description: Delete a domain from a workspace. It cannot be undone. This will also delete all the links associated with the domain. tags: - Domains security: - token: [] parameters: - in: path name: slug schema: type: string description: The domain name. example: acme.com required: true description: The domain name. responses: '200': description: The domain was deleted. content: application/json: schema: type: object properties: slug: type: string description: The domain name. example: acme.com required: - slug 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' /domains/register: post: operationId: registerDomain x-speakeasy-name-override: register summary: Register a domain description: Register a domain for the authenticated workspace. Only available for Enterprise Plans. tags: - Domains security: - token: [] requestBody: content: application/json: schema: type: object properties: domain: description: The domain to claim. We only support .link domains for now. example: acme.link type: string minLength: 1 pattern: .*\.link$ required: - domain responses: '201': description: The domain was registered. content: application/json: schema: type: object properties: domain: type: string description: The domain name. status: type: string description: The status of the domain registration. expiration: nullable: true type: number description: The expiration timestamp of the domain (Unix timestamp in milliseconds). required: - domain - status - expiration 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' /domains/status: get: operationId: checkDomainStatus x-speakeasy-name-override: checkStatus summary: Check the availability of one or more domains description: Check if a domain name is available for purchase. You can check multiple domains at once. tags: - Domains security: - token: [] parameters: - in: query name: domains schema: description: The domains to search. We only support .link domains for now. anyOf: - type: string - type: array items: type: string style: form explode: false required: true description: The domains to search. We only support .link domains for now. responses: '200': description: The domain status was retrieved. content: application/json: schema: type: array items: type: object properties: domain: type: string description: The domain name. available: type: boolean description: Whether the domain is available. price: nullable: true description: The price description. type: string premium: nullable: true description: Whether the domain is a premium domain. type: boolean required: - domain - available - price - premium 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' /track/lead: post: operationId: trackLead x-speakeasy-name-override: lead summary: Track a lead description: Track a lead for a short link. tags: - Track security: - token: [] requestBody: content: application/json: schema: type: object properties: clickId: type: string description: 'The unique ID of the click that the lead conversion event is attributed to. You can read this value from `dub_id` cookie. [For deferred lead tracking]: If an empty string is provided, Dub will try to find an existing customer with the provided `customerExternalId` and use the `clickId` from the customer if found.' eventName: type: string minLength: 1 maxLength: 255 description: The name of the lead event to track. Can also be used as a unique identifier to associate a given lead event for a customer for a subsequent sale event (via the `leadEventName` prop in `/track/sale`). example: Sign up customerExternalId: type: string minLength: 1 maxLength: 100 description: The unique ID of the customer in your system. Will be used to identify and attribute all future events to this customer. customerName: default: null description: The name of the customer. If not passed, a random name will be generated (e.g. “Big Red Caribou”). nullable: true type: string maxLength: 100 customerEmail: default: null description: The email address of the customer. nullable: true type: string maxLength: 100 format: email pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ customerAvatar: default: null description: The avatar URL of the customer. nullable: true type: string mode: default: async description: The mode to use for tracking the lead event. `async` will not block the request; `wait` will block the request until the lead event is fully recorded in Dub; `deferred` will defer the lead event creation to a subsequent request. type: string enum: - async - wait - deferred eventQuantity: description: The numerical value associated with this lead event (e.g., number of provisioned seats in a free trial). If defined as N, the lead event will be tracked N times. nullable: true type: number metadata: default: null description: Additional metadata to be stored with the lead event. Max 10,000 characters. nullable: true type: object additionalProperties: {} required: - clickId - eventName - customerExternalId responses: '200': description: A lead was tracked. content: application/json: schema: type: object properties: click: type: object properties: id: type: string required: - id additionalProperties: false link: nullable: true 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. partnerId: nullable: true description: The ID of the partner the short link is associated with. type: string programId: nullable: true description: The ID of the program the short link is associated with. 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 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 required: - id - domain - key - shortLink - url - partnerId - programId - tenantId - externalId additionalProperties: false customer: type: object properties: name: nullable: true type: string email: nullable: true type: string avatar: nullable: true type: string externalId: nullable: true type: string required: - name - email - avatar - externalId additionalProperties: false required: - click - link - customer 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' /track/sale: post: operationId: trackSale x-speakeasy-name-override: sale summary: Track a sale description: Track a sale for a short link. tags: - Track security: - token: [] requestBody: content: application/json: schema: type: object properties: customerExternalId: type: string minLength: 1 maxLength: 100 description: The unique ID of the customer in your system. Will be used to identify and attribute all future events to this customer. amount: type: integer minimum: 0 maximum: 9007199254740991 description: 'The amount of the sale in cents (for all two-decimal currencies). If the sale is in a zero-decimal currency, pass the full integer value (e.g. `1580` JPY). Learn more: https://d.to/currency' currency: description: 'The currency of the sale. Accepts ISO 4217 currency codes. Sales will be automatically converted and stored as USD at the latest exchange rates. Learn more: https://d.to/currency' default: usd type: string eventName: default: Purchase description: 'The name of the sale event. Recommended format: `Invoice paid` or `Subscription created`.' example: Invoice paid type: string maxLength: 255 paymentProcessor: default: custom description: The payment processor via which the sale was made. type: string enum: - stripe - shopify - polar - paddle - apple - revenuecat - dub - custom invoiceId: default: null description: The invoice ID of the sale. Can be used as a idempotency key – only one sale event can be recorded for a given invoice ID. nullable: true type: string metadata: default: null description: Additional metadata to be stored with the sale event. Max 10,000 characters when stringified. nullable: true type: object additionalProperties: {} leadEventName: default: null description: The name of the lead event that occurred before the sale (case-sensitive). This is used to associate the sale event with a particular lead event (instead of the latest lead event for a link-customer combination, which is the default behavior). For direct sale tracking, this field can also be used to specify the lead event name. example: Cloned template 1481267 nullable: true type: string clickId: description: '[For direct sale tracking]: The unique ID of the click that the sale conversion event is attributed to. You can read this value from `dub_id` cookie.' nullable: true type: string customerName: default: null description: '[For direct sale tracking]: The name of the customer. If not passed, a random name will be generated (e.g. “Big Red Caribou”).' nullable: true type: string maxLength: 100 customerEmail: default: null description: '[For direct sale tracking]: The email address of the customer.' nullable: true type: string maxLength: 100 format: email pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ customerAvatar: default: null description: '[For direct sale tracking]: The avatar URL of the customer.' nullable: true type: string required: - customerExternalId - amount responses: '200': description: A sale was tracked. content: application/json: schema: type: object properties: eventName: type: string customer: nullable: true type: object properties: id: type: string name: nullable: true type: string email: nullable: true type: string avatar: nullable: true type: string externalId: nullable: true type: string required: - id - name - email - avatar - externalId additionalProperties: false sale: nullable: true type: object properties: amount: type: number currency: type: string paymentProcessor: type: string invoiceId: nullable: true type: string metadata: nullable: true type: object additionalProperties: {} required: - amount - currency - paymentProcessor - invoiceId - metadata additionalProperties: false required: - eventName - customer - sale 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' /track/open: post: operationId: trackOpen x-speakeasy-ignore: true summary: Track a deep link open event description: This endpoint is used to track when a user opens your app via a Dub-powered deep link (for both iOS and Android). tags: - Track requestBody: content: application/json: schema: type: object properties: deepLink: description: 'The deep link that brought the user to the app. If left blank, Dub will fallback to probabilistic tracking by using the `dubDomain` parameter to check if there is an associated click event for the user''s IP address. Learn more: https://d.to/ddl' type: string maxLength: 32000 dubDomain: description: 'Your deep link custom domain on Dub (e.g. `acme.link`). This is used in probabilistic tracking to check if there is an associated click event for the user''s IP address. Learn more: https://d.to/ddl' type: string responses: '200': description: The response from the tracked open event. content: application/json: schema: type: object properties: clickId: nullable: true description: 'The click ID of the associated open event (or the prior click that led the user to the app store for probabilistic tracking). Learn more: https://d.to/ddl' type: string link: nullable: true description: 'The deep link that brought the user to the app. This will be `null` if the open event was not associated with a link (e.g. a direct download from the app store). Learn more: https://d.to/ddl' type: object properties: id: type: string description: The ID of the deep link. example: link_xxx domain: type: string description: The domain of the deep link. example: acme.link key: type: string description: The key of the deep link. example: fb-promo url: type: string description: The URL of the deep link. example: https://acme.com/product/123 required: - id - domain - key - url additionalProperties: false required: - clickId - link 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' /customers: get: operationId: getCustomers x-speakeasy-name-override: list x-speakeasy-pagination: type: cursor inputs: - name: startingAfter in: parameters type: cursor outputs: nextCursor: $[-1].id summary: List all customers description: Retrieve a paginated list of customers for the authenticated workspace. tags: - Customers security: - token: [] parameters: - in: query name: email schema: description: A case-sensitive filter on the list based on the customer's `email` field. The value must be a string. Takes precedence over `externalId`. type: string description: A case-sensitive filter on the list based on the customer's `email` field. The value must be a string. Takes precedence over `externalId`. - in: query name: externalId schema: description: A case-sensitive filter on the list based on the customer's `externalId` field. The value must be a string. Takes precedence over `search`. type: string description: A case-sensitive filter on the list based on the customer's `externalId` field. The value must be a string. Takes precedence over `search`. - in: query name: search schema: description: A search query to filter customers by email, externalId, or name. If `email` or `externalId` is provided, this will be ignored. type: string description: A search query to filter customers by email, externalId, or name. If `email` or `externalId` is provided, this will be ignored. - in: query name: country schema: description: A filter on the list based on the customer's `country` field. type: string description: A filter on the list based on the customer's `country` field. - in: query name: linkId schema: description: A filter on the list based on the customer's `linkId` field (the referral link ID). type: string description: A filter on the list based on the customer's `linkId` field (the referral link ID). - in: query name: programId schema: description: Program ID to filter by. type: string description: Program ID to filter by. - in: query name: partnerId schema: description: Partner ID to filter by. type: string description: Partner ID to filter by. - in: query name: includeExpandedFields schema: description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). type: boolean description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). - in: query name: sortBy schema: default: createdAt description: The field to sort the customers by. The default is `createdAt`. type: string enum: - createdAt - saleAmount - firstSaleAt - subscriptionCanceledAt description: The field to sort the customers by. The default is `createdAt`. - in: query name: sortOrder schema: default: desc description: The sort order. The default is `desc`. type: string enum: - asc - desc description: The sort order. The default is `desc`. - in: query name: endingBefore schema: description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. example: cus_1KAP4CDPBSVMMBMH9XX3YZZ0Z type: string description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. - in: query name: startingAfter schema: description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. example: cus_1KAP4CDPBSVMMBMH9XX3YZZ0Z type: string description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. - in: query name: page schema: description: DEPRECATED. Use `startingAfter` instead. example: 1 deprecated: true type: number minimum: 0 exclusiveMinimum: true description: DEPRECATED. Use `startingAfter` instead. - in: query name: pageSize schema: default: 100 description: The number of items per page. example: 50 type: number minimum: 0 exclusiveMinimum: true maximum: 100 description: The number of items per page. responses: '200': description: The list of customers. content: application/json: schema: type: array items: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string link: nullable: true 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. programId: nullable: true description: The ID of the program the short link is associated with. type: string required: - id - domain - key - shortLink - url - programId additionalProperties: false programId: nullable: true type: string partner: nullable: true type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string required: - id - name - email - image additionalProperties: false discount: nullable: true type: object properties: id: type: string amount: type: number type: type: string enum: - percentage - flat maxDuration: nullable: true type: number couponId: nullable: true type: string couponTestId: nullable: true type: string description: nullable: true type: string partnersCount: nullable: true type: number required: - id - amount - type - maxDuration - couponId - couponTestId additionalProperties: false required: - id - externalId - createdAt 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' /customers/{id}: get: operationId: getCustomer x-speakeasy-name-override: get summary: Retrieve a customer description: Retrieve a customer by ID for the authenticated workspace. To retrieve a customer by external ID, prefix the ID with `ext_`. tags: - Customers security: - token: [] parameters: - in: path name: id schema: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). required: true description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). - in: query name: includeExpandedFields schema: description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). type: boolean description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). responses: '200': description: The customer object. content: application/json: schema: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string link: nullable: true 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. programId: nullable: true description: The ID of the program the short link is associated with. type: string required: - id - domain - key - shortLink - url - programId additionalProperties: false programId: nullable: true type: string partner: nullable: true type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string required: - id - name - email - image additionalProperties: false discount: nullable: true type: object properties: id: type: string amount: type: number type: type: string enum: - percentage - flat maxDuration: nullable: true type: number couponId: nullable: true type: string couponTestId: nullable: true type: string description: nullable: true type: string partnersCount: nullable: true type: number required: - id - amount - type - maxDuration - couponId - couponTestId additionalProperties: false required: - id - externalId - createdAt 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' patch: operationId: updateCustomer x-speakeasy-name-override: update x-speakeasy-max-method-params: 2 summary: Update a customer description: Update a customer for the authenticated workspace. tags: - Customers security: - token: [] parameters: - in: path name: id schema: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). required: true description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). - in: query name: includeExpandedFields schema: description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). type: boolean description: Whether to include expanded fields on the customer (`link`, `partner`, `discount`). requestBody: content: application/json: schema: type: object properties: email: description: The customer's email address. nullable: true type: string format: email pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ name: description: The customer's name. If not provided, the email address will be used, and if email is not provided, a random name will be generated. nullable: true type: string avatar: description: The customer's avatar URL. If not provided, a random avatar will be generated. nullable: true type: string format: uri externalId: type: string description: The customer's unique identifier your database. This is useful for associating subsequent conversion events from Dub's API to your internal systems. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: type: string description: The customer's country in ISO 3166-1 alpha-2 format. Updating this field will only affect the customer's country in Dub's system (and has no effect on existing conversion events). responses: '200': description: The customer was updated. content: application/json: schema: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string link: nullable: true 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. programId: nullable: true description: The ID of the program the short link is associated with. type: string required: - id - domain - key - shortLink - url - programId additionalProperties: false programId: nullable: true type: string partner: nullable: true type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string required: - id - name - email - image additionalProperties: false discount: nullable: true type: object properties: id: type: string amount: type: number type: type: string enum: - percentage - flat maxDuration: nullable: true type: number couponId: nullable: true type: string couponTestId: nullable: true type: string description: nullable: true type: string partnersCount: nullable: true type: number required: - id - amount - type - maxDuration - couponId - couponTestId additionalProperties: false required: - id - externalId - createdAt 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' delete: operationId: deleteCustomer x-speakeasy-name-override: delete x-speakeasy-max-method-params: 1 summary: Delete a customer description: Delete a customer from a workspace. tags: - Customers security: - token: [] parameters: - in: path name: id schema: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). required: true description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). responses: '200': description: The customer was deleted. content: application/json: schema: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). required: - id 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: 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/applications: get: operationId: listPartnerApplications x-speakeasy-name-override: list summary: List all pending partner applications description: Retrieve a paginated list of pending applications for your partner program. tags: - Partner 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: 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 pending partner 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: nullable: true description: If the partner profile type is a company, this is the partner's legal company name. type: string maxLength: 190 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 groupId: description: The partner's group ID on Dub. nullable: true 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. 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 required: - id - name - companyName - email - image - country - status additionalProperties: false applicationFormData: nullable: true type: array items: type: object properties: label: type: string value: nullable: true type: string 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' /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/applications/approve: post: operationId: approvePartnerApplication 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: - Partner Applications security: - token: [] requestBody: required: true content: application/json: schema: type: object properties: partnerId: type: string description: The ID of the partner to approve. 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. nullable: true 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' /partners/applications/reject: post: operationId: rejectPartnerApplication 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: - Partner 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' /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' /commissions: post: operationId: createCommission x-speakeasy-name-override: create summary: Create commission description: Create one or more commissions (custom, lead or sale) for a partner. Commission creation is processed asynchronously. Use the List Commissions endpoint or webhooks to be notified when the commission is created. tags: - Commissions security: - token: [] requestBody: content: application/json: schema: oneOf: - type: object properties: type: type: string enum: - custom partnerId: type: string description: The ID of the partner to create the commission for. amount: description: The commission amount in cents. type: number date: description: If not provided, the current date will be used. nullable: true type: string description: description: The description of the commission. nullable: true type: string maxLength: 190 required: - type - partnerId - amount - type: object properties: type: type: string enum: - lead partnerId: type: string description: The ID of the partner to create the commission for. customerId: description: The customer ID to associate the commission with. Useful if the customer was already created in a prior operation and you want to associate the commission with it. nullable: true type: string customer: description: The full customer object to associate the commission with. Useful for creating the customer on demand. nullable: true type: object properties: email: description: The customer's email address. nullable: true type: string format: email pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ name: description: The customer's name. If not provided, the email address will be used, and if email is not provided, a random name will be generated. nullable: true type: string avatar: description: The customer's avatar URL. If not provided, a random avatar will be generated. nullable: true type: string format: uri externalId: type: string description: The customer's unique identifier your database. This is useful for associating subsequent conversion events from Dub's API to your internal systems. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: type: string description: The customer's country in ISO 3166-1 alpha-2 format. Updating this field will only affect the customer's country in Dub's system (and has no effect on existing conversion events). required: - externalId - country linkId: description: The partner link ID to associate the commission with. If not provided, default to the link with the most revenue. nullable: true type: string leadEventDate: description: The date and time of the lead event. If not provided, defaults to the current date and time. nullable: true type: string leadEventName: default: Sign up description: The name of the lead event. If not provided, defaults to 'Sign up'. nullable: true type: string required: - type - partnerId - type: object properties: type: type: string enum: - sale partnerId: type: string description: The ID of the partner to create the commission for. customerId: description: The customer ID to associate the commission with. Useful if the customer was already created in a prior operation and you want to associate the commission with it. nullable: true type: string customer: description: The full customer object to associate the commission with. Useful for creating the customer on demand. nullable: true type: object properties: email: description: The customer's email address. nullable: true type: string format: email pattern: ^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$ name: description: The customer's name. If not provided, the email address will be used, and if email is not provided, a random name will be generated. nullable: true type: string avatar: description: The customer's avatar URL. If not provided, a random avatar will be generated. nullable: true type: string format: uri externalId: type: string description: The customer's unique identifier your database. This is useful for associating subsequent conversion events from Dub's API to your internal systems. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: type: string description: The customer's country in ISO 3166-1 alpha-2 format. Updating this field will only affect the customer's country in Dub's system (and has no effect on existing conversion events). required: - externalId - country linkId: description: The partner link ID to associate the commission with. If not provided, default to the link with the most revenue. nullable: true type: string importStripeInvoices: default: false description: When `true`, import all unimported paid Stripe invoices for the customer and create a commission for each. When `false`, create a single manual sale event using `saleAmount`. nullable: true type: boolean saleAmount: description: Required when `importStripeInvoices` is `false`. The sale amount in cents for the manual sale event. Ignored when importing from Stripe. nullable: true type: number saleEventDate: description: Only used when `importStripeInvoices` is `false`. The date of the manual sale event. Defaults to the current date and time if not provided. nullable: true type: string invoiceId: description: Only used when `importStripeInvoices` is `false`. An optional invoice ID to attach to the generated sale event and commission entry for deduplication. nullable: true type: string productId: description: Only used when `importStripeInvoices` is `false`. An optional product ID stored on the sale event metadata – will also impact commission earnings calculation (if a `Sale` `Product ID` modifier is set). nullable: true type: string required: - type - partnerId type: object responses: '202': description: The request was accepted and commission creation was queued. content: application/json: schema: type: object properties: success: type: boolean message: type: string required: - success - message additionalProperties: false '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '409': $ref: '#/components/responses/409' '410': $ref: '#/components/responses/410' '422': $ref: '#/components/responses/422' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' get: operationId: listCommissions x-speakeasy-name-override: list x-speakeasy-pagination: type: cursor inputs: - name: startingAfter in: parameters type: cursor outputs: nextCursor: $[-1].id summary: List all commissions description: Retrieve a paginated list of commissions for your partner program. tags: - Commissions security: - token: [] parameters: - in: query name: type schema: description: 'Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.' type: string enum: - click - lead - sale - referral - custom description: 'Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.' - in: query name: customerId schema: description: Filter the list of commissions by the associated customer. type: string description: Filter the list of commissions by the associated customer. - in: query name: payoutId schema: description: Filter the list of commissions by the associated payout. type: string description: Filter the list of commissions by the associated payout. - in: query name: partnerId schema: description: 'Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.' type: string description: 'Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.' - in: query name: tenantId schema: description: Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database). type: string description: Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database). - in: query name: groupId schema: description: 'Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.' type: string description: 'Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.' - in: query name: partnerTagId schema: description: 'Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.' type: string description: 'Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.' - in: query name: invoiceId schema: description: Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice. type: string description: Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice. - in: query name: status schema: description: Filter the list of commissions by their corresponding status. type: string enum: - pending - processed - paid - refunded - duplicate - fraud - canceled description: Filter the list of commissions by their corresponding status. - in: query name: sortBy schema: default: createdAt description: The field to sort the list of commissions by. type: string enum: - createdAt - amount description: The field to sort the list of commissions by. - in: query name: sortOrder schema: default: desc description: The sort order for the list of commissions. type: string enum: - asc - desc description: The sort order for the list of commissions. - in: query name: interval schema: default: all description: The interval to retrieve commissions for. type: string enum: - 24h - 7d - 30d - 90d - 1y - mtd - qtd - ytd - all description: The interval to retrieve commissions for. - in: query name: start schema: description: The start date of the date range to filter the commissions by. type: string description: The start date of the date range to filter the commissions by. - in: query name: end schema: description: The end date of the date range to filter the commissions by. type: string description: The end date of the date range to filter the commissions by. - in: query name: timezone schema: type: string - in: query name: endingBefore schema: description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. example: cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 type: string description: If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. - in: query name: startingAfter schema: description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. example: cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 type: string description: If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. - in: query name: page schema: description: DEPRECATED. Use `startingAfter` instead. example: 1 deprecated: true type: number minimum: 0 exclusiveMinimum: true description: DEPRECATED. Use `startingAfter` instead. - in: query name: pageSize schema: default: 100 description: The number of items per page. example: 50 type: number minimum: 0 exclusiveMinimum: true maximum: 100 description: The number of items per page. responses: '200': description: The list of commissions. content: application/json: schema: type: array items: type: object properties: id: type: string description: The commission's unique ID on Dub. example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE type: type: string enum: - click - lead - sale - referral - custom amount: type: number earnings: type: number currency: type: string status: type: string enum: - pending - processed - paid - refunded - duplicate - fraud - canceled invoiceId: nullable: true type: string description: nullable: true type: string quantity: type: number userId: description: The user who created the manual commission. nullable: true type: string createdAt: type: string updatedAt: type: string partner: type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: description: The partner's group ID on Dub. nullable: true type: string required: - id - name - email - image - payoutsEnabledAt - country additionalProperties: false customer: nullable: true type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt additionalProperties: false required: - id - amount - earnings - currency - status - invoiceId - description - quantity - createdAt - updatedAt - partner additionalProperties: false '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '409': $ref: '#/components/responses/409' '410': $ref: '#/components/responses/410' '422': $ref: '#/components/responses/422' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /commissions/{id}: patch: operationId: updateCommission x-speakeasy-name-override: update summary: Update a commission description: Update an existing commission amount. This is useful for handling refunds (partial or full) or fraudulent sales. tags: - Commissions security: - token: [] parameters: - in: path name: id schema: type: string description: The commission's unique ID on Dub. example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE required: true description: The commission's unique ID on Dub. requestBody: content: application/json: schema: type: object properties: earnings: description: The new earnings amount for the commission. Paid commissions cannot be updated. If provided, will override the earnings calculated based on the sale amount and currency. type: number minimum: 0 saleAmount: description: The new absolute amount for the sale. Paid commissions cannot be updated. type: number minimum: 0 modifySaleAmount: description: 'Modify the current sale amount: use positive values to increase the amount, negative values to decrease it. Takes precedence over `saleAmount`. Paid commissions cannot be updated.' type: number currency: description: The currency of the sale amount to update. Accepts ISO 4217 currency codes. default: usd type: string status: description: Useful for marking a commission as pending, refunded, duplicate, canceled, or fraudulent. Takes precedence over `saleAmount` and `modifySaleAmount`. When a commission is marked as pending, refunded, duplicate, canceled, or fraudulent, it will be omitted from the payout, and the payout amount will be recalculated accordingly. Paid commissions cannot be updated. type: string enum: - pending - refunded - duplicate - canceled - fraud amount: description: Deprecated. Use `saleAmount` instead. deprecated: true type: number minimum: 0 modifyAmount: description: Deprecated. Use `modifySaleAmount` instead. deprecated: true type: number responses: '200': description: The updated commission. content: application/json: schema: type: object properties: id: type: string description: The commission's unique ID on Dub. example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE type: type: string enum: - click - lead - sale - referral - custom amount: type: number earnings: type: number currency: type: string status: type: string enum: - pending - processed - paid - refunded - duplicate - fraud - canceled invoiceId: nullable: true type: string description: nullable: true type: string quantity: type: number userId: description: The user who created the manual commission. nullable: true type: string createdAt: type: string updatedAt: type: string partner: type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: description: The partner's group ID on Dub. nullable: true type: string required: - id - name - email - image - payoutsEnabledAt - country additionalProperties: false customer: nullable: true type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt additionalProperties: false required: - id - amount - earnings - currency - status - invoiceId - description - quantity - createdAt - updatedAt - partner additionalProperties: false '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '409': $ref: '#/components/responses/409' '410': $ref: '#/components/responses/410' '422': $ref: '#/components/responses/422' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /commissions/bulk: patch: operationId: bulkUpdateCommissions x-speakeasy-name-override: updateMany summary: Bulk update commissions description: Bulk update up to 100 commissions with the same status. tags: - Commissions security: - token: [] requestBody: content: application/json: schema: type: object properties: commissionIds: minItems: 1 maxItems: 100 type: array items: type: string status: type: string enum: - pending - refunded - duplicate - canceled - fraud description: The status to apply to every commission in the batch. required: - commissionIds - status responses: '200': description: The updated commissions. content: application/json: schema: type: array items: type: object properties: id: type: string description: The commission's unique ID on Dub. example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE status: type: string enum: - pending - processed - paid - refunded - duplicate - fraud - canceled required: - id - status 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' /payouts: get: operationId: listPayouts x-speakeasy-name-override: list summary: List all payouts description: Retrieve a paginated list of payouts for your partner program. tags: - Payouts security: - token: [] parameters: - in: query name: status schema: description: Filter the list of payouts by their corresponding status. type: string enum: - pending - processing - processed - sent - completed - failed - canceled description: Filter the list of payouts by their corresponding status. - in: query name: partnerId schema: description: Filter the list of payouts by the associated partner. When specified, takes precedence over `tenantId`. type: string description: Filter the list of payouts by the associated partner. When specified, takes precedence over `tenantId`. - in: query name: tenantId schema: description: Filter the list of payouts by the associated partner's `tenantId` (their unique ID within your database). type: string description: Filter the list of payouts by the associated partner's `tenantId` (their unique ID within your database). - in: query name: invoiceId schema: description: Filter the list of payouts by invoice ID (the unique ID of the invoice you receive for each batch payout you process on Dub). Pending payouts will not have an invoice ID. type: string description: Filter the list of payouts by invoice ID (the unique ID of the invoice you receive for each batch payout you process on Dub). Pending payouts will not have an invoice ID. - in: query name: sortBy schema: default: amount description: The field to sort the list of payouts by. type: string enum: - amount - initiatedAt - paidAt description: The field to sort the list of payouts by. - in: query name: sortOrder schema: default: desc description: The sort order for the list of payouts. type: string enum: - asc - desc description: The sort order for the list of payouts. - 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 payouts. content: application/json: schema: type: array items: type: object properties: id: type: string invoiceId: nullable: true type: string amount: type: number currency: type: string status: type: string enum: - pending - processing - processed - sent - completed - failed - canceled description: nullable: true type: string periodStart: nullable: true type: string periodEnd: nullable: true type: string createdAt: type: string updatedAt: type: string initiatedAt: nullable: true type: string paidAt: nullable: true type: string failureReason: nullable: true type: string mode: nullable: true type: string enum: - internal - external method: nullable: true type: string enum: - connect - stablecoin - paypal traceId: nullable: true type: string partner: type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string 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 payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: description: The partner's group ID on Dub. nullable: true type: string 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 required: - id - name - email - image - defaultPayoutMethod - payoutsEnabledAt - country - tenantId additionalProperties: false user: nullable: true type: object properties: id: type: string name: nullable: true type: string email: nullable: true type: string image: nullable: true type: string required: - id - name - email - image additionalProperties: false required: - id - invoiceId - amount - currency - status - periodStart - periodEnd - createdAt - initiatedAt - paidAt - mode - method - partner additionalProperties: false '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '409': $ref: '#/components/responses/409' '410': $ref: '#/components/responses/410' '422': $ref: '#/components/responses/422' '429': $ref: '#/components/responses/429' '500': $ref: '#/components/responses/500' /tokens/embed/referrals: post: operationId: createReferralsEmbedToken x-speakeasy-name-override: referrals summary: Create a referrals embed token description: Create a referrals embed token for the given partner/tenant. The endpoint first attempts to locate an existing enrollment using the provided tenantId. If no enrollment is found, it resolves the partner by email and creates a new enrollment as needed. This results in an upsert-style flow that guarantees a valid enrollment and returns a usable embed token. tags: - Embed Tokens security: - token: [] requestBody: content: application/json: schema: type: object properties: partnerId: type: string tenantId: type: string partner: 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 public embed token. content: application/json: schema: type: object properties: publicToken: type: string expires: type: string required: - publicToken - expires 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' /qr: get: operationId: getQRCode x-speakeasy-name-override: get summary: Retrieve a QR code description: Retrieve a QR code for a link. tags: - QR Codes parameters: - in: query name: url schema: description: The URL to generate a QR code for. type: string maxLength: 32000 required: true description: The URL to generate a QR code for. - in: query name: logo schema: description: The logo to include in the QR code. Can only be used with a paid plan on Dub. type: string description: The logo to include in the QR code. Can only be used with a paid plan on Dub. - in: query name: size schema: default: 600 description: The size of the QR code in pixels. Defaults to `600` if not provided. type: number description: The size of the QR code in pixels. Defaults to `600` if not provided. - in: query name: level schema: default: L description: The level of error correction to use for the QR code. Defaults to `L` if not provided. type: string enum: - L - M - Q - H description: The level of error correction to use for the QR code. Defaults to `L` if not provided. - in: query name: fgColor schema: default: '#000000' description: The foreground color of the QR code in hex format. Defaults to `#000000` if not provided. type: string description: The foreground color of the QR code in hex format. Defaults to `#000000` if not provided. - in: query name: bgColor schema: default: '#FFFFFF' description: The background color of the QR code in hex format. Defaults to `#ffffff` if not provided. type: string description: The background color of the QR code in hex format. Defaults to `#ffffff` if not provided. - in: query name: hideLogo schema: default: false description: Whether to hide the logo in the QR code. Can only be used with a paid plan on Dub. type: boolean description: Whether to hide the logo in the QR code. Can only be used with a paid plan on Dub. - in: query name: margin schema: default: 2 description: The size of the margin around the QR code. Defaults to 2 if not provided. type: number description: The size of the margin around the QR code. Defaults to 2 if not provided. - in: query name: includeMargin schema: default: true description: 'DEPRECATED: Margin is included by default. Use the `margin` prop to customize the margin size.' deprecated: true type: boolean description: 'DEPRECATED: Margin is included by default. Use the `margin` prop to customize the margin size.' responses: '200': description: The QR code content: image/png: schema: type: string '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' /bounties/{bountyId}/submissions: get: operationId: listBountySubmissions x-speakeasy-name-override: listSubmissions summary: List bounty submissions description: List all submissions for a specific bounty in your partner program. tags: - Bounties security: - token: [] parameters: - in: path name: bountyId schema: type: string description: The unique ID of the bounty on Dub. Can be found in the URL of the bounty page, prefixed with `bnty_`. required: true description: The unique ID of the bounty on Dub. Can be found in the URL of the bounty page, prefixed with `bnty_`. - in: query name: status schema: description: The status of the submissions to list. type: string enum: - draft - submitted - approved - rejected description: The status of the submissions to list. - in: query name: groupId schema: description: The ID of the group to list submissions for. type: string description: The ID of the group to list submissions for. - in: query name: partnerId schema: description: The ID of the partner to list submissions for. type: string description: The ID of the partner to list submissions for. - in: query name: sortBy schema: default: completedAt description: The field to sort the submissions by. type: string enum: - completedAt - performanceCount - socialMetricCount description: The field to sort the submissions by. - in: query name: sortOrder schema: default: asc description: The order to sort the submissions by. type: string enum: - asc - desc description: The order to sort the submissions by. - 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 bounty submissions. content: application/json: schema: type: array items: type: object properties: id: type: string description: The ID of the bounty submission bountyId: type: string description: The ID of the bounty partnerId: type: string description: The ID of the partner description: nullable: true description: The description of the submission type: string urls: nullable: true description: The URLs submitted for the submission type: array items: type: string files: nullable: true description: The files uploaded for the submission type: array items: type: object properties: url: type: string format: uri description: The URL of the uploaded file. fileName: type: string description: The original file name. size: type: number description: The file size in bytes. required: - url - fileName - size additionalProperties: false status: type: string enum: - draft - submitted - approved - rejected description: The status of the submission performanceCount: description: The performance count of the submission nullable: true type: number socialMetricCount: nullable: true description: The social metric count (views or likes) for the social content type: integer minimum: -9007199254740991 maximum: 9007199254740991 socialMetricsLastSyncedAt: description: The date and time the submission's social metrics were last synced nullable: true type: string createdAt: description: The date and time the submission was created type: string completedAt: nullable: true description: The date and time the submission was completed type: string reviewedAt: nullable: true description: The date and time the submission was reviewed type: string rejectionReason: nullable: true description: The reason for rejecting the submission type: string rejectionNote: nullable: true description: The note for rejecting the submission type: string periodNumber: type: integer minimum: 1 maximum: 9007199254740991 description: The period number for this submission (1-indexed) required: - id - bountyId - partnerId - description - urls - files - status - performanceCount - socialMetricCount - createdAt - completedAt - reviewedAt - rejectionReason - rejectionNote - periodNumber 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' /bounties/{bountyId}/submissions/{submissionId}/approve: post: operationId: approveBountySubmission x-speakeasy-name-override: approveSubmission summary: Approve a bounty submission description: Approve a bounty submission. Optionally specify a custom reward amount. tags: - Bounties security: - token: [] parameters: - in: path name: bountyId schema: type: string description: The ID of the bounty required: true description: The ID of the bounty - in: path name: submissionId schema: type: string description: The ID of the bounty submission required: true description: The ID of the bounty submission requestBody: content: application/json: schema: type: object properties: rewardAmount: description: The reward amount for the performance-based bounty. Applicable if the bounty reward amount is not set. nullable: true type: number responses: '200': description: The approved bounty submission. content: application/json: schema: type: object properties: id: type: string description: The ID of the bounty submission bountyId: type: string description: The ID of the bounty partnerId: type: string description: The ID of the partner description: nullable: true description: The description of the submission type: string urls: nullable: true description: The URLs submitted for the submission type: array items: type: string files: nullable: true description: The files uploaded for the submission type: array items: type: object properties: url: type: string format: uri description: The URL of the uploaded file. fileName: type: string description: The original file name. size: type: number description: The file size in bytes. required: - url - fileName - size additionalProperties: false status: type: string enum: - draft - submitted - approved - rejected description: The status of the submission performanceCount: description: The performance count of the submission nullable: true type: number socialMetricCount: nullable: true description: The social metric count (views or likes) for the social content type: integer minimum: -9007199254740991 maximum: 9007199254740991 socialMetricsLastSyncedAt: description: The date and time the submission's social metrics were last synced nullable: true type: string createdAt: description: The date and time the submission was created type: string completedAt: nullable: true description: The date and time the submission was completed type: string reviewedAt: nullable: true description: The date and time the submission was reviewed type: string rejectionReason: nullable: true description: The reason for rejecting the submission type: string rejectionNote: nullable: true description: The note for rejecting the submission type: string periodNumber: type: integer minimum: 1 maximum: 9007199254740991 description: The period number for this submission (1-indexed) required: - id - bountyId - partnerId - description - urls - files - status - performanceCount - socialMetricCount - createdAt - completedAt - reviewedAt - rejectionReason - rejectionNote - periodNumber 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' /bounties/{bountyId}/submissions/{submissionId}/reject: post: operationId: rejectBountySubmission x-speakeasy-name-override: rejectSubmission summary: Reject a bounty submission description: Reject a bounty submission with a specified reason and optional note. tags: - Bounties security: - token: [] parameters: - in: path name: bountyId schema: type: string description: The ID of the bounty required: true description: The ID of the bounty - in: path name: submissionId schema: type: string description: The ID of the bounty submission required: true description: The ID of the bounty submission requestBody: content: application/json: schema: type: object properties: rejectionReason: description: The reason for rejecting the submission. type: string enum: - invalidProof - duplicateSubmission - outOfTimeWindow - didNotMeetCriteria - other rejectionNote: description: The note for rejecting the submission. type: string maxLength: 5000 responses: '200': description: The rejected bounty submission. content: application/json: schema: type: object properties: id: type: string description: The ID of the bounty submission bountyId: type: string description: The ID of the bounty partnerId: type: string description: The ID of the partner description: nullable: true description: The description of the submission type: string urls: nullable: true description: The URLs submitted for the submission type: array items: type: string files: nullable: true description: The files uploaded for the submission type: array items: type: object properties: url: type: string format: uri description: The URL of the uploaded file. fileName: type: string description: The original file name. size: type: number description: The file size in bytes. required: - url - fileName - size additionalProperties: false status: type: string enum: - draft - submitted - approved - rejected description: The status of the submission performanceCount: description: The performance count of the submission nullable: true type: number socialMetricCount: nullable: true description: The social metric count (views or likes) for the social content type: integer minimum: -9007199254740991 maximum: 9007199254740991 socialMetricsLastSyncedAt: description: The date and time the submission's social metrics were last synced nullable: true type: string createdAt: description: The date and time the submission was created type: string completedAt: nullable: true description: The date and time the submission was completed type: string reviewedAt: nullable: true description: The date and time the submission was reviewed type: string rejectionReason: nullable: true description: The reason for rejecting the submission type: string rejectionNote: nullable: true description: The note for rejecting the submission type: string periodNumber: type: integer minimum: 1 maximum: 9007199254740991 description: The period number for this submission (1-indexed) required: - id - bountyId - partnerId - description - urls - files - status - performanceCount - socialMetricCount - createdAt - completedAt - reviewedAt - rejectionReason - rejectionNote - periodNumber 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: schemas: linkGeoTargeting: description: 'Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information.' nullable: true type: object additionalProperties: type: string maxLength: 32000 LinkWebhookEvent: type: object properties: id: type: string event: anyOf: - type: string enum: - link.created - type: string enum: - link.updated - type: string enum: - link.deleted createdAt: type: string data: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: type: boolean tags: nullable: true description: The tags assigned to the short link. type: array items: $ref: '#/components/schemas/LinkTagSchema' 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 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId required: - id - event - createdAt - data description: Triggered when a link is created, updated, or deleted. LinkClickedEvent: type: object properties: id: type: string event: type: string enum: - link.clicked createdAt: type: string data: type: object properties: click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: type: boolean tags: nullable: true description: The tags assigned to the short link. type: array items: $ref: '#/components/schemas/LinkTagSchema' 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 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId required: - click - link required: - id - event - createdAt - data description: Triggered when a link is clicked. LeadCreatedEvent: type: object properties: id: type: string event: type: string enum: - lead.created createdAt: type: string data: type: object properties: eventName: type: string customer: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: type: boolean tags: nullable: true description: The tags assigned to the short link. type: array items: $ref: '#/components/schemas/LinkTagSchema' 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 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId partner: nullable: true type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: nullable: true type: string totalClicks: type: number totalLeads: type: number totalConversions: type: number totalSales: type: number totalSaleAmount: type: number totalCommissions: type: number required: - id - name - email - image - payoutsEnabledAt - country - totalClicks - totalLeads - totalConversions - totalSales - totalSaleAmount - totalCommissions metadata: default: null nullable: true type: object additionalProperties: {} required: - eventName - customer - click - link - metadata required: - id - event - createdAt - data description: Triggered when a lead is created. SaleCreatedEvent: type: object properties: id: type: string event: type: string enum: - sale.created createdAt: type: string data: type: object properties: eventName: type: string customer: type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt click: type: object properties: id: type: string timestamp: type: string url: type: string country: type: string city: type: string region: type: string continent: type: string device: type: string browser: type: string os: type: string trigger: nullable: true type: string referer: type: string refererUrl: type: string qr: type: boolean ip: type: string required: - id - timestamp - url - country - city - region - continent - device - browser - os - referer - refererUrl - qr - ip link: 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 trackConversion: 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: type: boolean expiresAt: type: string expiredUrl: nullable: true type: string disabledAt: type: string password: nullable: true description: The password required to access the destination URL of the short link. type: string proxy: 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: type: boolean doIndex: 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: type: boolean tags: nullable: true description: The tags assigned to the short link. type: array items: $ref: '#/components/schemas/LinkTagSchema' 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 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: type: string testCompletedAt: type: string userId: nullable: true 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: type: string createdAt: type: string updatedAt: type: string 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 - testStartedAt - testCompletedAt - userId - workspaceId - saleAmount - lastClicked - createdAt - updatedAt - tagId - projectId sale: type: object properties: amount: type: number currency: type: string paymentProcessor: type: string invoiceId: nullable: true type: string required: - amount - currency - paymentProcessor - invoiceId partner: nullable: true type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: nullable: true type: string totalClicks: type: number totalLeads: type: number totalConversions: type: number totalSales: type: number totalSaleAmount: type: number totalCommissions: type: number required: - id - name - email - image - payoutsEnabledAt - country - totalClicks - totalLeads - totalConversions - totalSales - totalSaleAmount - totalCommissions metadata: default: null nullable: true type: object additionalProperties: {} required: - eventName - customer - click - link - sale - metadata required: - id - event - createdAt - data description: Triggered when a sale is created. PartnerEnrolledEvent: type: object properties: id: type: string event: type: string enum: - partner.enrolled createdAt: type: string data: 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 - saleAmount 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 required: - key - label - required - locked - position - type - 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 required: - key - label - required - locked - position - type - 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 required: - key - label - required - locked - position - type - options - 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 - 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 - 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 required: - key - label - required - locked - position - type - options - 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 - 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 type: object required: - fields 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 tags: description: The tags associated with the partner. type: array items: type: object properties: id: type: string name: type: string required: - id - name 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 - totalSaleAmount - netRevenue required: - id - event - createdAt - data description: Triggered when a partner is enrolled. PartnerApplicationSubmittedEvent: type: object properties: id: type: string event: type: string enum: - partner.application_submitted createdAt: type: string data: 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: nullable: true description: If the partner profile type is a company, this is the partner's legal company name. type: string maxLength: 190 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 groupId: description: The partner's group ID on Dub. nullable: true 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. 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 required: - id - name - companyName - email - image - country - status applicationFormData: nullable: true type: array items: type: object properties: label: type: string value: nullable: true type: string required: - label - value required: - id - createdAt - partner - applicationFormData required: - id - event - createdAt - data description: Triggered when a partner submits an application to join a program. CommissionCreatedEvent: type: object properties: id: type: string event: type: string enum: - commission.created createdAt: type: string data: type: object properties: id: type: string description: The commission's unique ID on Dub. example: cm_1JVR7XRCSR0EDBAF39FZ4PMYE type: type: string enum: - click - lead - sale - referral - custom amount: type: number earnings: type: number currency: type: string status: type: string enum: - pending - processed - paid - refunded - duplicate - fraud - canceled invoiceId: nullable: true type: string description: nullable: true type: string quantity: type: number userId: description: The user who created the manual commission. nullable: true type: string createdAt: type: string updatedAt: type: string partner: type: object properties: id: type: string description: The partner's unique ID on Dub. name: type: string maxLength: 190 description: The partner's full legal name. email: nullable: true description: The partner's email address. Should be a unique value across Dub. type: string maxLength: 190 image: nullable: true description: The partner's avatar image. type: string payoutsEnabledAt: nullable: true description: The date when the partner enabled payouts. type: string country: nullable: true description: The partner's country (required for tax purposes). type: string groupId: nullable: true type: string totalClicks: type: number totalLeads: type: number totalConversions: type: number totalSales: type: number totalSaleAmount: type: number totalCommissions: type: number required: - id - name - email - image - payoutsEnabledAt - country - totalClicks - totalLeads - totalConversions - totalSales - totalSaleAmount - totalCommissions customer: nullable: true type: object properties: id: type: string description: The unique ID of the customer. You may use either the customer's `id` on Dub (obtained via `/customers` endpoint) or their `externalId` (unique ID within your system, prefixed with `ext_`, e.g. `ext_123`). name: description: Name of the customer. nullable: true type: string email: description: Email of the customer. nullable: true type: string avatar: description: Avatar URL of the customer. nullable: true type: string externalId: type: string description: Unique identifier for the customer in the client's app. stripeCustomerId: description: The customer's Stripe customer ID. This is useful for attributing recurring sale events to the partner who referred the customer. nullable: true type: string country: description: Country of the customer. nullable: true type: string sales: description: Total number of sales for the customer. nullable: true type: number saleAmount: description: Total amount of sales for the customer. nullable: true type: number createdAt: description: The date the customer was created (usually the signup date or trial start date). type: string firstSaleAt: description: The date the customer made their first sale. Useful for calculating the time to first sale and LTV. nullable: true type: string subscriptionCanceledAt: description: The date the customer canceled their subscription. Useful for calculating LTV and churn rate. nullable: true type: string required: - id - externalId - createdAt link: nullable: true type: object properties: id: type: string description: The unique ID of the short link. shortLink: type: string format: uri description: The full URL of the short link, including the https protocol (e.g. `https://dub.sh/try`). 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. required: - id - shortLink - domain - key required: - id - amount - earnings - currency - status - invoiceId - description - quantity - createdAt - updatedAt - partner - link required: - id - event - createdAt - data description: Triggered when a commission is created for a partner. LinkTagSchema: 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 title: LinkTag AnalyticsCount: 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 required: - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsTimeseries: 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 required: - start - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsContinents: type: object properties: continent: type: string enum: - AF - AN - AS - EU - NA - OC - SA description: The 2-letter ISO 3166-1 code representing the continent associated with the location of the user. clicks: default: 0 type: number description: The number of clicks from this continent leads: default: 0 type: number description: The number of leads from this continent sales: default: 0 type: number description: The number of sales from this continent saleAmount: description: The total amount of sales from this continent, in cents default: 0 type: number required: - continent - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsCountries: type: object properties: country: type: string description: 'The 2-letter ISO 3166-1 country code of the country. Learn more: https://d.to/geo' region: default: '*' type: string enum: - '*' city: default: '*' type: string enum: - '*' clicks: default: 0 type: number description: The number of clicks from this country leads: default: 0 type: number description: The number of leads from this country sales: default: 0 type: number description: The number of sales from this country saleAmount: description: The total amount of sales from this country, in cents default: 0 type: number required: - country - region - city - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsRegions: type: object properties: country: type: string description: 'The 2-letter ISO 3166-1 country code of the country. Learn more: https://d.to/geo' region: type: string description: The 2-letter ISO 3166-2 region code of the region. city: default: '*' type: string enum: - '*' clicks: default: 0 type: number description: The number of clicks from this region leads: default: 0 type: number description: The number of leads from this region sales: default: 0 type: number description: The number of sales from this region saleAmount: description: The total amount of sales from this region, in cents default: 0 type: number required: - country - region - city - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsCities: type: object properties: country: type: string description: 'The 2-letter ISO 3166-1 country code of the country where this city is located. Learn more: https://d.to/geo' region: type: string description: The 2-letter ISO 3166-2 region code representing the region associated with the location of the user. city: type: string description: The name of the city clicks: default: 0 type: number description: The number of clicks from this city leads: default: 0 type: number description: The number of leads from this city sales: default: 0 type: number description: The number of sales from this city saleAmount: description: The total amount of sales from this city, in cents default: 0 type: number required: - country - region - city - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsDevices: type: object properties: device: type: string description: The name of the device clicks: default: 0 type: number description: The number of clicks from this device leads: default: 0 type: number description: The number of leads from this device sales: default: 0 type: number description: The number of sales from this device saleAmount: description: The total amount of sales from this device, in cents default: 0 type: number required: - device - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsBrowsers: type: object properties: browser: type: string description: The name of the browser clicks: default: 0 type: number description: The number of clicks from this browser leads: default: 0 type: number description: The number of leads from this browser sales: default: 0 type: number description: The number of sales from this browser saleAmount: description: The total amount of sales from this browser, in cents default: 0 type: number required: - browser - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsOS: type: object properties: os: type: string description: The name of the OS clicks: default: 0 type: number description: The number of clicks from this OS leads: default: 0 type: number description: The number of leads from this OS sales: default: 0 type: number description: The number of sales from this OS saleAmount: description: The total amount of sales from this OS, in cents default: 0 type: number required: - os - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsTriggers: type: object properties: trigger: type: string enum: - qr - link - pageview - deeplink description: 'The type of trigger method: link click or QR scan' clicks: default: 0 type: number description: The number of clicks from this trigger method leads: default: 0 type: number description: The number of leads from this trigger method sales: default: 0 type: number description: The number of sales from this trigger method saleAmount: description: The total amount of sales from this trigger method, in cents default: 0 type: number required: - trigger - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsReferers: type: object properties: referer: type: string description: The name of the referer. If unknown, this will be `(direct)` clicks: default: 0 type: number description: The number of clicks from this referer leads: default: 0 type: number description: The number of leads from this referer sales: default: 0 type: number description: The number of sales from this referer saleAmount: description: The total amount of sales from this referer, in cents default: 0 type: number required: - referer - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsRefererUrls: type: object properties: refererUrl: type: string description: The full URL of the referer. If unknown, this will be `(direct)` clicks: default: 0 type: number description: The number of clicks from this referer to this URL leads: default: 0 type: number description: The number of leads from this referer to this URL sales: default: 0 type: number description: The number of sales from this referer to this URL saleAmount: description: The total amount of sales from this referer to this URL, in cents default: 0 type: number required: - refererUrl - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsTopLinks: 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 required: - link - id - domain - key - shortLink - url - createdAt - clicks - leads - sales - saleAmount additionalProperties: false AnalyticsTopUrls: type: object properties: url: type: string description: The full destination URL (including query parameters) clicks: default: 0 type: number description: The number of clicks from this URL leads: default: 0 type: number description: The number of leads from this URL sales: default: 0 type: number description: The number of sales from this URL saleAmount: description: The total amount of sales from this URL, in cents default: 0 type: number required: - url - clicks - leads - sales - saleAmount additionalProperties: false 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 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 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 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 FolderSchema: type: object properties: id: type: string description: The unique ID of the folder. name: type: string description: The name of the folder. description: nullable: true description: The description of the folder. type: string type: type: string enum: - default - mega accessLevel: default: null description: The access level of the folder within the workspace. nullable: true type: string enum: - write - read createdAt: description: The date the folder was created. type: string updatedAt: description: The date the folder was updated. type: string required: - id - name - description - type - accessLevel - createdAt - updatedAt additionalProperties: false DomainSchema: type: object properties: id: type: string description: The unique identifier of the domain. slug: type: string description: The domain name. example: acme.com verified: default: false description: Whether the domain is verified. type: boolean primary: default: false description: Whether the domain is the primary domain for the workspace. type: boolean archived: default: false type: boolean description: Whether the domain is archived. placeholder: nullable: true description: Provide context to your teammates in the link creation modal by showing them an example of a link to be shortened. example: https://dub.co/help/article/dub-links type: string expiredUrl: nullable: true description: The URL to redirect to when a link under this domain has expired. example: https://acme.com/expired type: string notFoundUrl: nullable: true description: The URL to redirect to when a link under this domain doesn't exist. example: https://acme.com/not-found type: string logo: nullable: true description: The logo of the domain. type: string assetLinks: default: null description: assetLinks.json configuration file (for deep link support on Android). nullable: true type: string appleAppSiteAssociation: default: null description: apple-app-site-association configuration file (for deep link support on iOS). nullable: true type: string createdAt: description: The date the domain was created. type: string updatedAt: description: The date the domain was last updated. type: string registeredDomain: nullable: true description: The registered domain record. type: object properties: id: type: string description: The ID of the registered domain record. autoRenewalDisabledAt: nullable: true description: The date the domain auto-renew is disabled. type: string createdAt: description: The date the domain was created. type: string expiresAt: description: The date the domain expires. type: string renewalFee: type: number description: The fee to renew the domain. required: - id - autoRenewalDisabledAt - createdAt - expiresAt - renewalFee additionalProperties: false required: - id - slug - verified - primary - archived - placeholder - expiredUrl - notFoundUrl - logo - assetLinks - appleAppSiteAssociation - createdAt - updatedAt - registeredDomain additionalProperties: false 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 WebhookEvent: anyOf: - $ref: '#/components/schemas/LinkWebhookEvent' - $ref: '#/components/schemas/LinkClickedEvent' - $ref: '#/components/schemas/LeadCreatedEvent' - $ref: '#/components/schemas/SaleCreatedEvent' - $ref: '#/components/schemas/PartnerEnrolledEvent' - $ref: '#/components/schemas/PartnerApplicationSubmittedEvent' - $ref: '#/components/schemas/CommissionCreatedEvent' description: Webhook event schema x-speakeasy-include: true LinkErrorSchema: type: object properties: link: description: The link that caused the error. error: type: string description: The error message. code: type: string enum: - bad_request - unauthorized - forbidden - exceeded_limit - not_found - conflict - invite_pending - invite_expired - unprocessable_entity - rate_limit_exceeded - internal_server_error description: The error code. required: - link - error - code additionalProperties: false title: LinkError 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 '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 '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 '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 '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 '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 securitySchemes: token: type: http description: Default authentication mechanism scheme: bearer x-speakeasy-example: DUB_API_KEY