exportasyncfunctionPOST(){try{const link =await dub.links.create({ url:"https://google.com",});return Response.json(link);}catch(error){return Response.json({ error },{ status:500});}}
url
string
required
The destination URL of the short link.
domain
string
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
string
The short link slug. If not provided, a random 7-character slug will be
generated.
externalId
string | null
This is the ID of the link in your database. If set, it can be used to
identify the link in the future.
prefix
string
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.
archived
boolean
default: false
Whether the short link is archived.
publicStats
boolean
default: false
Whether the short link’s stats are publicly accessible.
tagId
string | null
The unique ID of the tag assigned to the short link. This field is deprecated
– use tagIds instead.
tagIds
string
The unique IDs of the tags assigned to the short link.
comments
string | null
The comments for the short link.
expiresAt
string | null
The date and time when the short link will expire at.
expiredUrl
string | null
The URL to redirect to when the short link has expired.
password
string | null
The password required to access the destination URL of the short link.
proxy
boolean
default: false
Whether the short link uses Custom Social Media Cards feature.
title
string | null
The title of the short link generated via api.dub.co/metatags. Will be used
for Custom Social Media Cards if proxy is true.
description
string | null
The description of the short link generated via api.dub.co/metatags. Will be
used for Custom Social Media Cards if proxy is true.
image
string | null
The image of the short link generated via api.dub.co/metatags. Will be used
for Custom Social Media Cards if proxy is true.
rewrite
boolean
default: false
Whether the short link uses link cloaking.
ios
string | null
The iOS destination URL for the short link for iOS device targeting.
android
string | null
The Android destination URL for the short link for Android device targeting.
utm_source
string | null
The UTM source of the short link. If set, this will populate or override the
UTM source in the destination URL.
utm_medium
string | null
The UTM medium of the short link. If set, this will populate or override the
UTM medium in the destination URL.
utm_campaign
string | null
The UTM campaign of the short link. If set, this will populate or override the
UTM campaign in the destination URL.
utm_term
string | null
The UTM term of the short link. If set, this will populate or override the UTM
term in the destination URL.
utm_content
string | null
The UTM content of the short link. If set, this will populate or override the
UTM content in the destination URL.
Optionally, you can also pass an externalId field which is a unique identifier for the link in your own database to associate it with the link in Dub’s system.
Dub TypeScript SDK provides a method to upsert a link – where an existing link is updated if it exists, or a new link is created if it doesn’t. so you don’t have to worry about checking if the link already exists.
app/api/links/route.ts
exportasyncfunctionPATCH(){try{const{ shortLink }=await dub.links.upsert({ url:"https://google.com",});return Response.json({ shortLink });// will always be the same short link}catch(error){return Response.json({ error },{ status:500});}}
This way, you won’t have to worry about checking if the link already exists when you’re creating it.
Let’s update an existing link using the Dub TypeScript SDK.
You can do that in two ways:
Using the link’s linkId in Dub’s system.
Using the link’s externalId in your own database (prefixed with ext_).
app/api/links/route.ts
exportasyncfunctionPATCH(){try{// Update a link by its linkIdconst{ shortLink }=await dub.links.update("clv3o9p9q000au1h0mc7r6l63",{ url:"https://www.google.uk",// new URL});// Update a link by its externalIdconst{ shortLink }=await dub.links.update("ext_12345",{ url:"https://www.google.uk",// new URL});return Response.json({ shortLink });}catch(error){return Response.json({ error },{ status:500});}}
Dub allows you to retrieve analytics for a link using the Dub TypeScript SDK.
app/api/analytics/route.ts
import{ ClicksTimeseries }from"dub/models/components";exportasyncfunctionGET(){try{// Retrieve the timeseries analytics for the last 7 days for a linkconst response =await dub.analytics.retrieve({ linkId:"clv3o9p9q000au1h0mc7r6l63", interval:"7d", groupBy:"timeseries",});const timeseries = response as ClicksTimeseries[];return Response.json(timeseries);}catch(error){return Response.json({ error },{ status:500});}}
Similarly, you can retrieve analytics for a link using the externalId field.
app/api/analytics/route.ts
// Retrieve the timeseries analytics for the last 7 days for a linkconst response =await dub.analytics.retrieve({ externalId:"ext_12345", interval:"7d", groupBy:"timeseries",});const timeseries = response as ClicksTimeseries[];