openapi: 3.0.3 info: title: Dub Analytics Events API description: Dub is the modern link attribution platform for short links, conversion tracking, and affiliate programs. version: 0.0.1 contact: name: Dub Support email: support@dub.co url: https://dub.co/support license: name: AGPL-3.0 license url: https://github.com/dubinc/dub/blob/main/LICENSE.md servers: - url: https://api.dub.co description: Production API tags: - name: Events paths: /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' components: responses: '500': description: The server has encountered a situation it does not know how to handle. content: application/json: schema: x-speakeasy-name-override: InternalServerError type: object properties: error: type: object properties: code: type: string enum: - internal_server_error description: A short code indicating the error code returned. example: internal_server_error message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#internal-server_error required: - code - message required: - error '429': description: The user has sent too many requests in a given amount of time ("rate limiting") content: application/json: schema: x-speakeasy-name-override: RateLimitExceeded type: object properties: error: type: object properties: code: type: string enum: - rate_limit_exceeded description: A short code indicating the error code returned. example: rate_limit_exceeded message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#rate-limit_exceeded required: - code - message required: - error '422': description: The request was well-formed but was unable to be followed due to semantic errors. content: application/json: schema: x-speakeasy-name-override: UnprocessableEntity type: object properties: error: type: object properties: code: type: string enum: - unprocessable_entity description: A short code indicating the error code returned. example: unprocessable_entity message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#unprocessable-entity required: - code - message required: - error '403': description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401 Unauthorized, the client's identity is known to the server. content: application/json: schema: x-speakeasy-name-override: Forbidden type: object properties: error: type: object properties: code: type: string enum: - forbidden description: A short code indicating the error code returned. example: forbidden message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#forbidden required: - code - message required: - error '404': description: The server cannot find the requested resource. content: application/json: schema: x-speakeasy-name-override: NotFound type: object properties: error: type: object properties: code: type: string enum: - not_found description: A short code indicating the error code returned. example: not_found message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#not-found required: - code - message required: - error '401': description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response. content: application/json: schema: x-speakeasy-name-override: Unauthorized type: object properties: error: type: object properties: code: type: string enum: - unauthorized description: A short code indicating the error code returned. example: unauthorized message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#unauthorized required: - code - message required: - error '400': description: The server cannot or will not process the request due to something that is perceived to be a client error (e.g., malformed request syntax, invalid request message framing, or deceptive request routing). content: application/json: schema: x-speakeasy-name-override: BadRequest type: object properties: error: type: object properties: code: type: string enum: - bad_request description: A short code indicating the error code returned. example: bad_request message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#bad-request required: - code - message required: - error '409': description: This response is sent when a request conflicts with the current state of the server. content: application/json: schema: x-speakeasy-name-override: Conflict type: object properties: error: type: object properties: code: type: string enum: - conflict description: A short code indicating the error code returned. example: conflict message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#conflict required: - code - message required: - error '410': description: This response is sent when the requested content has been permanently deleted from server, with no forwarding address. content: application/json: schema: x-speakeasy-name-override: InviteExpired type: object properties: error: type: object properties: code: type: string enum: - invite_expired description: A short code indicating the error code returned. example: invite_expired message: x-speakeasy-error-message: true type: string description: A human readable explanation of what went wrong. example: The requested resource was not found. doc_url: type: string description: A link to our documentation with more details about this error code example: https://dub.co/docs/api-reference/errors#invite-expired required: - code - message required: - error schemas: 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 securitySchemes: token: type: http description: Default authentication mechanism scheme: bearer x-speakeasy-example: DUB_API_KEY