---
title: "Links API Reference"
description: "Endpoints for managing shortened links in Linkbreakers. These endpoints allow you to create, retrieve, list, and delete shortened links for your workspace."
canonical: "https://linkbreakers.com/help/api/links"
---

# Links

Endpoints for managing shortened links in Linkbreakers. These endpoints allow you to create, retrieve, list, and delete shortened links for your workspace.

## Links

## [#](#links-object)The Link object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

createdAt

string (date-time)

When the link was created.

customDomain

object

Captures a branded hostname that Linkbreakers provisions for a workspace so scans and shortlinks resolve under the customer's domain, including verification and certificate lifecycle state.

customDomainId

string

The ID of the custom domain (UUID). This is the custom domain that is used to access the link. If not defined, the link will be accessed using the default domain.

directoryId

string

The ID of the directory this link belongs to (UUID). If not set, the link is at the root level (not in any directory).

entrypoint

string

The entrypoint URL This is the URL that is available to be redirected to the destination.

eventCount

integer (int64)

The number of time the link has been scanned. This number isn't refreshed instantly but will update itself within a few seconds.

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty means it never expires. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

fallbackDestination

string

The fallback destination URL to use when workflow steps are broken

id

string

The unique identifier of the link (UUID)

metadata

object

A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.

name

string

The name of the link

pageTheme

object

Page theme configuration

pageThemeId

string

The ID of the page theme for this link (UUID).

pageThemeTemplateId

string

The page theme template this link's styling was applied from (UUID). Empty when the theme was styled by hand rather than taken from a template. Set when a template is applied, and unchanged by later edits, so it records where the look came from rather than what it is now.

purpose

string

What the user is trying to achieve with this link, in one or two sentences.

qrcodeDesign

object

Captures the visual recipe Linkbreakers uses when rendering downloadable QR codes, including colors, shapes, export options, and center media. QR Code Designs are the visual representation of a link. They can be attached to QR Code Templates for reusability. They can only be attached to one record at a time.

qrcodeDesignId

string

The ID of the link design (UUID). This is the ID of the design that is used to generate the QR Code. If not defined, the design from the QR Code template will be used.

qrcodeEnabled

boolean

Whether the link has a QR code. When false the link has no QR code at all: qrcode\_design\_id, qrcode\_design and qrcode\_signed\_url are empty, and the QR code design endpoints refuse the link until it is turned back on with UpdateLink.

qrcodePendingUpdateSince

string (date-time)

When the link is pending QR Code update. This happens when the QR Code Design is updated and the QR Code image is still being processed.

qrcodeSignedUrl

string

The signed URL for the QR Code image. This URL eventually expires.

qrcodeTemplateId

string

The ID of the design template (UUID). This is the template that is used to generate the first QR Code Design assigned to the link. If not defined, a default QR Code Design will be generated.

shortlink

string

The short link for the link. This is the path segment that is attached to the URL. It can be defined by the client or generated by the system but is never null. It is unique within a custom domain or Linkbreakers default domain.

tags

array<object>

The tags associated with the link.

updatedAt

string (date-time)

When the link was last updated.

workspaceId

string

The workspace ID the link belongs to (UUID)

[Learn moreLearn more about links in Linkbreakers](https://linkbreakers.com/help/article/whats-a-link)

Example object

```json
{
  "createdAt": "2026-10-25T11:15:17.310Z",
  "customDomain": {
    "activatedAt": "2026-10-25T11:15:17.310Z",
    "certificateExpiresAt": "2026-10-25T11:15:17.310Z",
    "cloudflareHostnameStatus": "active",
    "cloudflareSslStatus": "pending_validation",
    "createdAt": "2026-10-25T11:15:17.310Z",
    "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "lastCheckedAt": "2026-10-25T11:15:17.310Z",
    "lastError": "string",
    "name": "example.com",
    "rootDestination": "https://example.com",
    "status": "STATUS_ACTIVE",
    "updatedAt": "2026-10-25T11:15:17.310Z",
    "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
  },
  "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
  "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
  "entrypoint": "https://linkbreak.ing/4BnH-R19p",
  "eventCount": 128,
  "expiredDestination": "https://example.com/campaign-over",
  "expiresAt": "2026-12-31T23:59:59Z",
  "fallbackDestination": "https://brand.example.com/fallback",
  "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
  "metadata": {},
  "name": "string",
  "pageTheme": {
    "badgeEnabled": false,
    "badgeIconColor": {
      "colors": [
        "string"
      ],
      "direction": "string",
      "stops": [
        "string"
      ],
      "type": "THEME_COLOR_TYPE_UNSPECIFIED"
    },
    "badgeId": "string",
    "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
    "bodyFont": {
      "bold": false,
      "color": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
      "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
      "fontSize": 0,
      "italic": false
    },
    "canvasColor": {
      "colors": [
        "string"
      ],
      "direction": "string",
      "stops": [
        "string"
      ],
      "type": "THEME_COLOR_TYPE_UNSPECIFIED"
    },
    "canvasCoverId": "string",
    "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
    "containerConfig": {
      "backgroundColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "borderColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "borderSize": 0,
      "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
      "opacity": 0,
      "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
    },
    "containerEnabled": false,
    "createdAt": "2026-10-25T11:15:17.310Z",
    "elementColor": {
      "colors": [
        "string"
      ],
      "direction": "string",
      "stops": [
        "string"
      ],
      "type": "THEME_COLOR_TYPE_UNSPECIFIED"
    },
    "elementFont": {
      "bold": false,
      "color": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
      "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
      "fontSize": 0,
      "italic": false
    },
    "footerLogoEnabled": false,
    "footerLogoId": "string",
    "id": "string",
    "titleFont": {
      "bold": false,
      "color": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
      "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
      "fontSize": 0,
      "italic": false
    },
    "updatedAt": "2026-10-25T11:15:17.310Z",
    "workspaceId": "string"
  },
  "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "purpose": "string",
  "qrcodeDesign": {
    "backgroundOptions": {
      "themeColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      }
    },
    "centralImageMargin": 0,
    "centralImageMediaId": "string",
    "centralImageSignedUrl": "https://example.com",
    "centralImageSize": 0,
    "cornersDotOptions": {
      "themeColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
    },
    "cornersSquareOptions": {
      "themeColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
    },
    "createdAt": "2026-10-25T11:15:17.310Z",
    "dotsOptions": {
      "themeColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "type": "DOTS_TYPE_UNSPECIFIED"
    },
    "errorCorrectionLevel": "string",
    "height": 0,
    "hideBackgroundDots": false,
    "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
    "shape": "SHAPE_SQUARE",
    "updatedAt": "2026-10-25T11:15:17.310Z",
    "width": 0
  },
  "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
  "qrcodeEnabled": true,
  "qrcodePendingUpdateSince": "2026-10-25T11:15:17.310Z",
  "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "shortlink": "4BnH-R19p",
  "tags": [
    {
      "createdAt": "2026-10-25T11:15:17.310Z",
      "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
      "name": "string",
      "updatedAt": "2026-10-25T11:15:17.310Z"
    }
  ],
  "updatedAt": "2026-10-25T11:15:17.310Z",
  "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
}
```

GET

`/v1/links`

Requires auth

## [#](#list-links)List links

Retrieves the shortened links for your workspace Requires the \`links:read\` scope.

### [#](#list-links-parameters)Parameters

#### query parameters

pageSize

integer (int64)

Required

query

The maximum number of links to return.

pageToken

string

query

The token for retrieving the next page of results If not provided, the first page of results will be returned

include

array<string>

query

List of related resources to include in the response. Supported values: "customDomain", "qrcodeDesign", "qrcodeSignedUrl", "tags", "pageTheme". Use "qrcodeSignedUrl" to fetch signed QR image URLs—they are omitted by default to keep requests fast.

tags

array<string>

query

Tags to filter links by (matches links containing any of the provided tags)

search

string

query

Search query to filter links by name or shortlink Search query to filter links by name or shortlink

sortBy

string

query

Field to sort links by (defaults to updated\_at if not specified) Field to sort links by

##### Allowed values

`LINK_SORT_FIELD_UNSPECIFIED`

Sort field not specified (defaults to updated\_at)

`LINK_SORT_FIELD_CREATED_AT`

Sort by creation date

`LINK_SORT_FIELD_UPDATED_AT`

Sort by last update date

`LINK_SORT_FIELD_SHORTLINK`

Sort by shortlink name

`LINK_SORT_FIELD_NAME`

Sort by link name

`LINK_SORT_FIELD_EVENT_COUNT`

Sort by event count

sortDirection

string

query

Sort direction (defaults to descending if not specified) Sort direction (ascending or descending)

##### Allowed values

`SORT_DIRECTION_UNSPECIFIED`

Sort direction not specified (defaults to descending)

`SORT_DIRECTION_ASC`

Sort in ascending order

`SORT_DIRECTION_DESC`

Sort in descending order

view

string

query

View mode. Default returns all links. LINK\_VIEW\_DIRECTORY scopes to a directory (or root when directory\_id is empty). When directory\_id is set, returns links in that directory. When directory\_id is empty, returns root-level links (no directory).

##### Allowed values

`LINK_VIEW_UNSPECIFIED`

Return all links regardless of directory (default)

`LINK_VIEW_DIRECTORY`

Return links scoped to a directory.

directoryId

string

query

Directory ID to scope to when view is LINK\_VIEW\_DIRECTORY. When empty with LINK\_VIEW\_DIRECTORY, returns root-level links.

cursor

string

query

Opaque cursor from the previous page's nextPageToken. Same as pageToken; when both are sent, pageToken wins.

### [#](#list-links-response)Response

200

Everything worked as expected.

links

array<object>

nextPageToken

string

Cursor to fetch the next page of links

totalCount

integer (int64)

Total number of links matching the current filters

### [#](#list-links-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X GET "https://api.linkbreakers.com/v1/links?pageSize={pageSize}&pageToken={pageToken}&include={include}&tags={tags}&search={search}&sortBy={sortBy}&sortDirection={sortDirection}&view={view}&directoryId={directoryId}&cursor={cursor}" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

Typical response

```json
{
  "links": [
    {
      "createdAt": "2026-10-25T11:15:17.293Z",
      "customDomain": {
        "activatedAt": "2026-10-25T11:15:17.293Z",
        "certificateExpiresAt": "2026-10-25T11:15:17.293Z",
        "cloudflareHostnameStatus": "active",
        "cloudflareSslStatus": "pending_validation",
        "createdAt": "2026-10-25T11:15:17.293Z",
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "lastCheckedAt": "2026-10-25T11:15:17.293Z",
        "lastError": "string",
        "name": "example.com",
        "rootDestination": "https://example.com",
        "status": "STATUS_ACTIVE",
        "updatedAt": "2026-10-25T11:15:17.293Z",
        "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
      },
      "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
      "entrypoint": "https://linkbreak.ing/4BnH-R19p",
      "eventCount": 128,
      "expiredDestination": "https://example.com/campaign-over",
      "expiresAt": "2026-12-31T23:59:59Z",
      "fallbackDestination": "https://brand.example.com/fallback",
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "metadata": {},
      "name": "string",
      "pageTheme": {
        "badgeEnabled": false,
        "badgeIconColor": {},
        "badgeId": "string",
        "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
        "bodyFont": {},
        "canvasColor": {},
        "canvasCoverId": "string",
        "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
        "containerConfig": {},
        "containerEnabled": false,
        "createdAt": "2026-10-25T11:15:17.294Z",
        "elementColor": {},
        "elementFont": {},
        "footerLogoEnabled": false,
        "footerLogoId": "string",
        "id": "string",
        "titleFont": {},
        "updatedAt": "2026-10-25T11:15:17.294Z",
        "workspaceId": "string"
      },
      "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "purpose": "string",
      "qrcodeDesign": {
        "backgroundOptions": {},
        "centralImageMargin": 0,
        "centralImageMediaId": "string",
        "centralImageSignedUrl": "https://example.com",
        "centralImageSize": 0,
        "cornersDotOptions": {},
        "cornersSquareOptions": {},
        "createdAt": "2026-10-25T11:15:17.294Z",
        "dotsOptions": {},
        "errorCorrectionLevel": "string",
        "height": 0,
        "hideBackgroundDots": false,
        "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
        "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
        "shape": "SHAPE_SQUARE",
        "updatedAt": "2026-10-25T11:15:17.294Z",
        "width": 0
      },
      "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "qrcodeEnabled": true,
      "qrcodePendingUpdateSince": "2026-10-25T11:15:17.294Z",
      "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
      "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "shortlink": "4BnH-R19p",
      "tags": [
        {}
      ],
      "updatedAt": "2026-10-25T11:15:17.294Z",
      "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
    }
  ],
  "nextPageToken": "eyJsaW5rSWQiOiI0YmEifQ==",
  "totalCount": 42
}
```

Base URL: `https://api.linkbreakers.com`

GET

`/v1/links/{id}`

Requires auth

## [#](#get-link-details)Get link details

Retrieves information about a shortened link including its metadata and metrics. Requires the \`links:read\` scope.

### [#](#get-link-details-parameters)Parameters

#### path parameters

id

string

Required

path

The ID of the link to retrieve (UUID)

#### query parameters

include

array<string>

query

List of related resources to include in the response. Supported values: "customDomain", "qrcodeDesign", "qrcodeSignedUrl", "tags", "pageTheme". Use "qrcodeSignedUrl" to fetch signed QR image URLs—they are omitted by default to keep requests fast.

### [#](#get-link-details-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

### [#](#get-link-details-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X GET "https://api.linkbreakers.com/v1/links/{id}?include={include}" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.308Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.308Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.308Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.308Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.308Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.308Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.308Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.308Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.308Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.308Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.308Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.308Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.308Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.308Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  }
}
```

Base URL: `https://api.linkbreakers.com`

GET

`/v1/links/shortlink-availability`

Requires auth

## [#](#check-shortlink-availability)Check shortlink availability

Checks if a shortlink is available for use to create a new link. A custom domain can be provided to check against. It typically checks the shortlink slugs and shortlink IDs already present within the system. Requires the \`links:read\` scope.

### [#](#check-shortlink-availability-parameters)Parameters

#### query parameters

shortlink

string

query

The shortlink to check availability for.

customDomainId

string

query

The ID of the custom domain to check against (UUID) If not provided, checks against the default domain

### [#](#check-shortlink-availability-response)Response

200

Everything worked as expected.

available

boolean

Whether the slug is available for use

### [#](#check-shortlink-availability-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X GET "https://api.linkbreakers.com/v1/links/shortlink-availability?shortlink={shortlink}&customDomainId={customDomainId}" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

Typical response

```json
{
  "available": false
}
```

Base URL: `https://api.linkbreakers.com`

GET

`/v1/links/shortlink-random`

Requires auth

## [#](#get-a-random-shortlink)Get a random shortlink

Generates a random availableshortlink for a new link. Requires the \`links:read\` scope.

### [#](#get-a-random-shortlink-parameters)Parameters

This endpoint does not accept any parameters.

### [#](#get-a-random-shortlink-response)Response

200

Everything worked as expected.

shortlink

string

Suggested available shortlink slug generated by the service

### [#](#get-a-random-shortlink-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X GET "https://api.linkbreakers.com/v1/links/shortlink-random" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

Typical response

```json
{
  "shortlink": "string"
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links`

Requires auth

## [#](#create-a-new-link)Create a new link

This endpoint allows users to create a new shortened URL link in their Linkbreakers workspace. The URL will be checked for malicious content before being shortened. Requires the \`links:write\` scope.

### [#](#create-a-new-link-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-a-new-link-request)Request body

conversionTracking

boolean

Enable conversion tracking by preserving lbid in redirect URL.

customDomainId

string

Optional custom domain ID (UUID). Leave empty to use the default domain.

destination

string

Required

The destination URL to shorten. This field is required.

directoryId

string

Directory to organize this link into. If empty, link is created at root level.

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty means it never expires. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

fallbackDestination

string

The fallback destination URL to use when workflow steps are broken

id

string

Optional pre-generated link ID (UUID). Skipped from the AI tool schema: on a create there is no existing link to alias, so exposing it only invites the LLM to invent a raw UUID. The system generates the id and returns it as an alias in the response.

metadata

object

A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.

name

string

The name of the link

purpose

string

What the user is trying to achieve with this link, in one or two sentences. The link's assistant conversations read it as context, so it is restated whenever the workflow changes shape.

qrcodeDesignId

string

The QR Code design ID (UUID).

qrcodeEnabled

boolean

Whether the link has a QR code. Defaults to true. When false, the link is created without any QR code: no QR code design is created, no image is generated, qrcode\_design\_id stays empty and qrcode\_signed\_url is never set. The shortlink and workflow are unaffected. qrcode\_template\_id is still stored and used if the QR code is turned on later. Cannot be combined with qrcode\_design\_id or wait\_for\_qrcode=true.

qrcodeTemplateId

string

The ID of the QR Code template (UUID)

shortlink

string

The shortlink (URL slug) for the link. If not given, a unique one is generated by the system.

tags

array<string>

List of tags to associate with the link. If a tag doesn't exist, it will be created.

waitForQrcode

boolean

Wait for QR code generation to complete before returning response.

### [#](#create-a-new-link-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

workflowSteps

array<object>

The workflow steps that were created alongside the link. Every link is created with an entry step (event\_action EVENT\_ACTION\_LINK\_VISIT, kind KIND\_ENTRY) and a default exit step, already connected to each other. They are returned here so a caller never has to guess or look up the entry step's id before attaching its own steps to it.

### [#](#create-a-new-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"conversionTracking":true,"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","destination":"https://example.com","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","fallbackDestination":"https://example.com/fallback","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"My Link","purpose":"Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"my-link","tags":["string"],"waitForQrcode":true}'
```

Sample payload (application/json)

```json
{
  "conversionTracking": true,
  "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
  "destination": "https://example.com",
  "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "expiredDestination": "https://example.com/campaign-over",
  "expiresAt": "2026-12-31T23:59:59Z",
  "fallbackDestination": "https://example.com/fallback",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {},
  "name": "My Link",
  "purpose": "Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.",
  "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
  "qrcodeEnabled": false,
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "shortlink": "my-link",
  "tags": [
    "string"
  ],
  "waitForQrcode": true
}
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.297Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.297Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.297Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.297Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.297Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.297Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.297Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.297Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.297Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.297Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.297Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.297Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.297Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.297Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  },
  "workflowSteps": [
    {
      "attributeCapture": {
        "enabled": false,
        "writes": []
      },
      "backButton": {
        "enabled": false,
        "label": "Back to menu"
      },
      "backButtonAvailable": false,
      "branches": [
        {}
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "childStepIds": [
        "string"
      ],
      "createdAt": "2026-10-25T11:15:17.298Z",
      "eventAction": "EVENT_ACTION_CLIENT_REDIRECT",
      "id": "a5f7b184-9d74-4f2a-9ed9-8f6a98cb12f4",
      "kind": "KIND_INTERACTION",
      "linkId": "123e4567-e89b-12d3-a456-426614174000",
      "nextCanGoBack": false,
      "nodeType": "NODE_TYPE_COMPOSITE",
      "parentStepIds": [
        "string"
      ],
      "payload": {
        "clientRedirect": {},
        "countryCondition": {},
        "dayOfMonthCondition": {},
        "dayOfWeekCondition": {},
        "deviceActorCondition": {},
        "deviceBrandCondition": {},
        "deviceBrowserCondition": {},
        "devicePlatformCondition": {},
        "deviceTypeCondition": {},
        "form": {},
        "linkVisit": {},
        "messagePage": {},
        "multiLink": {},
        "openMedia": {},
        "password": {},
        "socialLinks": {},
        "specificDateCondition": {},
        "thankYouPage": {},
        "timeOfDayCondition": {},
        "vcard": {},
        "visitTypeCondition": {},
        "visitorDataCondition": {}
      },
      "rendersPage": false,
      "updatedAt": "2026-10-25T11:15:17.298Z"
    }
  ]
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/batch`

Requires auth

## [#](#create-multiple-links-in-a-single-request)Create multiple links in a single request

Creates links in batch using the same per-link options as Create. This operation is transactional: if one link fails validation or insertion, no links from the batch are created. Requires the \`links:write\` scope.

### [#](#create-multiple-links-in-a-single-request-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-multiple-links-in-a-single-request-request)Request body

items

array<object>

Required

Request to create a new link.

### [#](#create-multiple-links-in-a-single-request-response)Response

200

Everything worked as expected.

links

array<object>

### [#](#create-multiple-links-in-a-single-request-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/batch" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '[{"conversionTracking":true,"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","destination":"https://example.com","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","fallbackDestination":"https://example.com/fallback","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"My Link","purpose":"Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"my-link","tags":["string"],"waitForQrcode":true}]'
```

Sample payload (application/json)

```json
[
  {
    "conversionTracking": true,
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "destination": "https://example.com",
    "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://example.com/fallback",
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "metadata": {},
    "name": "My Link",
    "purpose": "Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.",
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": false,
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "my-link",
    "tags": [
      "string"
    ],
    "waitForQrcode": true
  }
]
```

Typical response

```json
{
  "links": [
    {
      "createdAt": "2026-10-25T11:15:17.299Z",
      "customDomain": {
        "activatedAt": "2026-10-25T11:15:17.299Z",
        "certificateExpiresAt": "2026-10-25T11:15:17.299Z",
        "cloudflareHostnameStatus": "active",
        "cloudflareSslStatus": "pending_validation",
        "createdAt": "2026-10-25T11:15:17.299Z",
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "lastCheckedAt": "2026-10-25T11:15:17.299Z",
        "lastError": "string",
        "name": "example.com",
        "rootDestination": "https://example.com",
        "status": "STATUS_ACTIVE",
        "updatedAt": "2026-10-25T11:15:17.299Z",
        "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
      },
      "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
      "entrypoint": "https://linkbreak.ing/4BnH-R19p",
      "eventCount": 128,
      "expiredDestination": "https://example.com/campaign-over",
      "expiresAt": "2026-12-31T23:59:59Z",
      "fallbackDestination": "https://brand.example.com/fallback",
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "metadata": {},
      "name": "string",
      "pageTheme": {
        "badgeEnabled": false,
        "badgeIconColor": {},
        "badgeId": "string",
        "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
        "bodyFont": {},
        "canvasColor": {},
        "canvasCoverId": "string",
        "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
        "containerConfig": {},
        "containerEnabled": false,
        "createdAt": "2026-10-25T11:15:17.300Z",
        "elementColor": {},
        "elementFont": {},
        "footerLogoEnabled": false,
        "footerLogoId": "string",
        "id": "string",
        "titleFont": {},
        "updatedAt": "2026-10-25T11:15:17.300Z",
        "workspaceId": "string"
      },
      "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "purpose": "string",
      "qrcodeDesign": {
        "backgroundOptions": {},
        "centralImageMargin": 0,
        "centralImageMediaId": "string",
        "centralImageSignedUrl": "https://example.com",
        "centralImageSize": 0,
        "cornersDotOptions": {},
        "cornersSquareOptions": {},
        "createdAt": "2026-10-25T11:15:17.300Z",
        "dotsOptions": {},
        "errorCorrectionLevel": "string",
        "height": 0,
        "hideBackgroundDots": false,
        "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
        "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
        "shape": "SHAPE_SQUARE",
        "updatedAt": "2026-10-25T11:15:17.300Z",
        "width": 0
      },
      "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "qrcodeEnabled": true,
      "qrcodePendingUpdateSince": "2026-10-25T11:15:17.300Z",
      "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
      "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "shortlink": "4BnH-R19p",
      "tags": [
        {}
      ],
      "updatedAt": "2026-10-25T11:15:17.300Z",
      "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
    }
  ]
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/bulk`

Requires auth

## [#](#create-multiple-links-in-a-single-request)Create multiple links in a single request

Creates links in batch using the same per-link options as Create. This operation is transactional: if one link fails validation or insertion, no links from the batch are created. Requires the \`links:write\` scope.

### [#](#create-multiple-links-in-a-single-request-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-multiple-links-in-a-single-request-request)Request body

links

array<object>

Required

Links to create in one batch. Every item supports the same customization fields as CreateLinkRequest.

### [#](#create-multiple-links-in-a-single-request-response)Response

200

Everything worked as expected.

links

array<object>

### [#](#create-multiple-links-in-a-single-request-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/bulk" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"links":[{"conversionTracking":true,"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","destination":"https://example.com","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","fallbackDestination":"https://example.com/fallback","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"My Link","purpose":"Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"my-link","tags":["string"],"waitForQrcode":true}]}'
```

Sample payload (application/json)

```json
{
  "links": [
    {
      "conversionTracking": true,
      "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "destination": "https://example.com",
      "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "expiredDestination": "https://example.com/campaign-over",
      "expiresAt": "2026-12-31T23:59:59Z",
      "fallbackDestination": "https://example.com/fallback",
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "metadata": {},
      "name": "My Link",
      "purpose": "Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.",
      "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "qrcodeEnabled": false,
      "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "shortlink": "my-link",
      "tags": [
        "string"
      ],
      "waitForQrcode": true
    }
  ]
}
```

Typical response

```json
{
  "links": [
    {
      "createdAt": "2026-10-25T11:15:17.300Z",
      "customDomain": {
        "activatedAt": "2026-10-25T11:15:17.300Z",
        "certificateExpiresAt": "2026-10-25T11:15:17.300Z",
        "cloudflareHostnameStatus": "active",
        "cloudflareSslStatus": "pending_validation",
        "createdAt": "2026-10-25T11:15:17.300Z",
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "lastCheckedAt": "2026-10-25T11:15:17.300Z",
        "lastError": "string",
        "name": "example.com",
        "rootDestination": "https://example.com",
        "status": "STATUS_ACTIVE",
        "updatedAt": "2026-10-25T11:15:17.300Z",
        "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
      },
      "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
      "entrypoint": "https://linkbreak.ing/4BnH-R19p",
      "eventCount": 128,
      "expiredDestination": "https://example.com/campaign-over",
      "expiresAt": "2026-12-31T23:59:59Z",
      "fallbackDestination": "https://brand.example.com/fallback",
      "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      "metadata": {},
      "name": "string",
      "pageTheme": {
        "badgeEnabled": false,
        "badgeIconColor": {},
        "badgeId": "string",
        "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
        "bodyFont": {},
        "canvasColor": {},
        "canvasCoverId": "string",
        "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
        "containerConfig": {},
        "containerEnabled": false,
        "createdAt": "2026-10-25T11:15:17.300Z",
        "elementColor": {},
        "elementFont": {},
        "footerLogoEnabled": false,
        "footerLogoId": "string",
        "id": "string",
        "titleFont": {},
        "updatedAt": "2026-10-25T11:15:17.300Z",
        "workspaceId": "string"
      },
      "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "purpose": "string",
      "qrcodeDesign": {
        "backgroundOptions": {},
        "centralImageMargin": 0,
        "centralImageMediaId": "string",
        "centralImageSignedUrl": "https://example.com",
        "centralImageSize": 0,
        "cornersDotOptions": {},
        "cornersSquareOptions": {},
        "createdAt": "2026-10-25T11:15:17.300Z",
        "dotsOptions": {},
        "errorCorrectionLevel": "string",
        "height": 0,
        "hideBackgroundDots": false,
        "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
        "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
        "shape": "SHAPE_SQUARE",
        "updatedAt": "2026-10-25T11:15:17.300Z",
        "width": 0
      },
      "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "qrcodeEnabled": true,
      "qrcodePendingUpdateSince": "2026-10-25T11:15:17.300Z",
      "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
      "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "shortlink": "4BnH-R19p",
      "tags": [
        {}
      ],
      "updatedAt": "2026-10-25T11:15:17.300Z",
      "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
    }
  ]
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/bulk/jobs`

Requires auth

## [#](#create-links-in-bulk-in-the-background)Create links in bulk in the background

Accepts the same batch as POST /v1/links/bulk, answers 202 Accepted at once with a job and a Location header, and creates the links in the background. Poll GET /v1/jobs/{id} for the result. The batch is transactional: when the job fails, no link was created. Requires the \`links:write\` scope.

### [#](#create-links-in-bulk-in-the-background-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-links-in-bulk-in-the-background-request)Request body

links

array<object>

Required

Links to create in one batch. Every item supports the same customization fields as CreateLinkRequest.

### [#](#create-links-in-bulk-in-the-background-response)Response

202

Accepted. The links are being created; poll the job at the Location header (GET /v1/jobs/{id}).

completedAt

string (date-time)

When the job finished, once it has.

createdAt

string (date-time)

When the job was accepted.

error

object

Why a job failed.

id

string

Job ID (UUID).

itemCount

integer (int32)

How many items the job was submitted with.

linksBulkCreate

object

Result of a JOB\_TYPE\_LINKS\_BULK\_CREATE job.

status

string (enum)

Where a job stands.

##### Allowed values

`JOB_STATUS_UNSPECIFIED`

Not set.

`JOB_STATUS_PENDING`

Accepted and waiting to run.

`JOB_STATUS_RUNNING`

Running now.

`JOB_STATUS_SUCCEEDED`

Finished; the result is set.

`JOB_STATUS_FAILED`

Finished without doing its work; error says why. Nothing was created.

statusUrl

string

Path to poll for this job's status.

type

string (enum)

What a job does.

##### Allowed values

`JOB_TYPE_UNSPECIFIED`

Not set.

`JOB_TYPE_LINKS_BULK_CREATE`

Creates a batch of links (POST /v1/links/bulk/jobs).

### [#](#create-links-in-bulk-in-the-background-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/bulk/jobs" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"links":[{"conversionTracking":true,"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","destination":"https://example.com","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","fallbackDestination":"https://example.com/fallback","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"My Link","purpose":"Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"my-link","tags":["string"],"waitForQrcode":true}]}'
```

Sample payload (application/json)

```json
{
  "links": [
    {
      "conversionTracking": true,
      "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "destination": "https://example.com",
      "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "expiredDestination": "https://example.com/campaign-over",
      "expiresAt": "2026-12-31T23:59:59Z",
      "fallbackDestination": "https://example.com/fallback",
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "metadata": {},
      "name": "My Link",
      "purpose": "Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.",
      "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "qrcodeEnabled": false,
      "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
      "shortlink": "my-link",
      "tags": [
        "string"
      ],
      "waitForQrcode": true
    }
  ]
}
```

Typical response

```json
{
  "completedAt": "2026-10-25T11:15:17.301Z",
  "createdAt": "2026-10-25T11:15:17.301Z",
  "error": {
    "codeType": "string",
    "message": "string"
  },
  "id": "string",
  "itemCount": 0,
  "linksBulkCreate": {
    "linkIds": [
      "string"
    ]
  },
  "status": "JOB_STATUS_UNSPECIFIED",
  "statusUrl": "https://example.com",
  "type": "JOB_TYPE_UNSPECIFIED"
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/contact`

Requires auth

## [#](#create-a-new-contact-card-link)Create a new contact card link

This endpoint allows users to create a new vCard contact link in their Linkbreakers workspace. The link will generate a vCard file for contact information sharing. Requires the \`links:write\` scope.

### [#](#create-a-new-contact-card-link-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-a-new-contact-card-link-request)Request body

customDomainId

string

Optional custom domain ID (UUID). Leave empty to use the default domain. Only provide if the user explicitly asks for a specific custom domain.

directoryId

string

Directory to organize this link into. If empty, link is created at root level.

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty means it never expires. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

fallbackDestination

string

Optional fallback URL if vCard download fails or is not supported.

id

string

Optional pre-generated link ID (UUID). The create wizard generates the id up front and navigates to it, so the link has to be created with that id or the page waits on a link that never arrives. Skipped from the AI tool schema for the same reason as on CreateLinkRequest: on a create there is nothing to alias, and exposing it only invites the model to invent a UUID.

metadata

object

A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.

name

string

The name of the link

purpose

string

What the user is trying to achieve with this link, in one or two sentences. The link's assistant conversations read it as context, so it is restated whenever the workflow changes shape.

qrcodeDesignId

string

The QR Code design ID (UUID). If you include this value, the specified design will be associated to this link only. A design can belong to one record at a time (Link or QR Code Template). Trying to use a design that's already assigned will cause an error.

qrcodeEnabled

boolean

Whether the link has a QR code. Defaults to true. When false, the link is created without any QR code: no QR code design is created, no image is generated, qrcode\_design\_id stays empty and qrcode\_signed\_url is never set. The shortlink and workflow are unaffected. qrcode\_template\_id is still stored and used if the QR code is turned on later. Cannot be combined with qrcode\_design\_id or wait\_for\_qrcode=true.

qrcodeTemplateId

string

The ID of the QR Code template (UUID) If not given, the default QR Code template will be used to generate the QR Code design.

shortlink

string

The shortlink for the link If not given, the shortlink will be generated by the system.

tags

array<string>

List of tags to associate with the link. If a tag doesn't exist, it will be created.

vcardData

object

Required

VCardData contains the contact information for vCard links

waitForQrcode

boolean

Wait for QR code generation to complete. Note: This makes the request slower compared to asynchronous generation.

### [#](#create-a-new-contact-card-link-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

### [#](#create-a-new-contact-card-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/contact" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","fallbackDestination":"https://company.com/contact","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"Jane Doe Contact Card","purpose":"Capture contact details for sales outreach. Good leads: business contacts interested in our services.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"jane-contact","tags":["string"],"vcardData":{"buttonLabel":"Add to contacts","city":"San Francisco","country":"United States","email":"hello@acme.com","firstName":"Jane","lastName":"Doe","organization":"Acme Corporation","phone":"+33123456789","phoneIsWhatsapp":false,"phoneSmsEnabled":false,"postalCode":"94102","saveButtonEnabled":false,"socialLinks":[{"platform":"linkedin","url":"https://linkedin.com/in/janedoe"}],"state":"CA","streetAddress":"123 Main Street","title":"Software Engineer","website":"https://acme.com"},"waitForQrcode":true}'
```

Sample payload (application/json)

```json
{
  "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
  "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "expiredDestination": "https://example.com/campaign-over",
  "expiresAt": "2026-12-31T23:59:59Z",
  "fallbackDestination": "https://company.com/contact",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {},
  "name": "Jane Doe Contact Card",
  "purpose": "Capture contact details for sales outreach. Good leads: business contacts interested in our services.",
  "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
  "qrcodeEnabled": false,
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "shortlink": "jane-contact",
  "tags": [
    "string"
  ],
  "vcardData": {
    "buttonLabel": "Add to contacts",
    "city": "San Francisco",
    "country": "United States",
    "email": "hello@acme.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "organization": "Acme Corporation",
    "phone": "+33123456789",
    "phoneIsWhatsapp": false,
    "phoneSmsEnabled": false,
    "postalCode": "94102",
    "saveButtonEnabled": false,
    "socialLinks": [
      {
        "platform": "linkedin",
        "url": "https://linkedin.com/in/janedoe"
      }
    ],
    "state": "CA",
    "streetAddress": "123 Main Street",
    "title": "Software Engineer",
    "website": "https://acme.com"
  },
  "waitForQrcode": true
}
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.302Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.302Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.302Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.302Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.302Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.302Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.303Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.303Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.303Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.303Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.303Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.303Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.303Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.303Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  }
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/open-media`

Requires auth

## [#](#create-a-new-media-link)Create a new media link

Creates a link, and its QR code, that hands visitors one piece of media from the media library: a PDF (a menu or brochure), an image (PNG, JPEG, WebP, SVG) or an MP4 video. Upload the media first (POST /v1/media, or a direct upload for media over 3 MB; no usage is needed), then pass its media\_id. Any media of the library can be opened. The Open media step is the exit step. Swap the media later by pointing the step at another media item. Requires the \`links:write\` scope.

### [#](#create-a-new-media-link-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-a-new-media-link-request)Request body

customDomainId

string

Optional custom domain ID (UUID). Leave empty to use the default domain. Only provide if the user explicitly asks for a specific custom domain.

directoryId

string

Directory to organize this link into. If empty, link is created at root level.

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty means it never expires. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

id

string

Optional pre-generated link ID (UUID). Same contract as on CreateLinkRequest: the caller may pick the id so a page can navigate to the link before it exists, and it is skipped from the AI tool schema so the model is never invited to invent one.

mediaId

string

Required

Media item handed to visitors: any ready media of the workspace. Required.

metadata

object

A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.

name

string

The name of the link

purpose

string

What the user is trying to achieve with this link, in one or two sentences. The link's assistant conversations read it as context, so it is restated whenever the workflow changes shape.

qrcodeDesignId

string

The QR Code design ID (UUID). If you include this value, the specified design will be associated to this link only. A design can belong to one record at a time (Link or QR Code Template). Trying to use a design that's already assigned will cause an error.

qrcodeEnabled

boolean

Whether the link has a QR code. Defaults to true. When false, the link is created without any QR code: no QR code design is created, no image is generated, qrcode\_design\_id stays empty and qrcode\_signed\_url is never set. The shortlink and workflow are unaffected. qrcode\_template\_id is still stored and used if the QR code is turned on later. Cannot be combined with qrcode\_design\_id or wait\_for\_qrcode=true.

qrcodeTemplateId

string

The ID of the QR Code template (UUID) If not given, the default QR Code template will be used to generate the QR Code design.

shortlink

string

The shortlink for the link If not given, the shortlink will be generated by the system.

tags

array<string>

List of tags to associate with the link. If a tag doesn't exist, it will be created.

waitForQrcode

boolean

Wait for QR code generation to complete. Note: This makes the request slower compared to asynchronous generation.

### [#](#create-a-new-media-link-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

workflowSteps

array<object>

The workflow steps created alongside the link: the entry step and the OPEN\_MEDIA exit step, already connected

### [#](#create-a-new-media-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/open-media" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","id":"550e8400-e29b-41d4-a716-446655440000","mediaId":"5f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f","metadata":{},"name":"Spring Menu","purpose":"Let restaurant guests open the spring menu from the table QR code.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"menu","tags":["string"],"waitForQrcode":true}'
```

Sample payload (application/json)

```json
{
  "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
  "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "expiredDestination": "https://example.com/campaign-over",
  "expiresAt": "2026-12-31T23:59:59Z",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "mediaId": "5f1c2d3e-4b5a-6c7d-8e9f-0a1b2c3d4e5f",
  "metadata": {},
  "name": "Spring Menu",
  "purpose": "Let restaurant guests open the spring menu from the table QR code.",
  "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
  "qrcodeEnabled": false,
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "shortlink": "menu",
  "tags": [
    "string"
  ],
  "waitForQrcode": true
}
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.305Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.305Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.305Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.305Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.305Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.305Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.305Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.305Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.305Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.305Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.305Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.305Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.305Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.305Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  },
  "workflowSteps": [
    {
      "attributeCapture": {
        "enabled": false,
        "writes": []
      },
      "backButton": {
        "enabled": false,
        "label": "Back to menu"
      },
      "backButtonAvailable": false,
      "branches": [
        {}
      ],
      "canvasPosition": {
        "x": 0,
        "y": 0
      },
      "childStepIds": [
        "string"
      ],
      "createdAt": "2026-10-25T11:15:17.305Z",
      "eventAction": "EVENT_ACTION_CLIENT_REDIRECT",
      "id": "a5f7b184-9d74-4f2a-9ed9-8f6a98cb12f4",
      "kind": "KIND_INTERACTION",
      "linkId": "123e4567-e89b-12d3-a456-426614174000",
      "nextCanGoBack": false,
      "nodeType": "NODE_TYPE_COMPOSITE",
      "parentStepIds": [
        "string"
      ],
      "payload": {
        "clientRedirect": {},
        "countryCondition": {},
        "dayOfMonthCondition": {},
        "dayOfWeekCondition": {},
        "deviceActorCondition": {},
        "deviceBrandCondition": {},
        "deviceBrowserCondition": {},
        "devicePlatformCondition": {},
        "deviceTypeCondition": {},
        "form": {},
        "linkVisit": {},
        "messagePage": {},
        "multiLink": {},
        "openMedia": {},
        "password": {},
        "socialLinks": {},
        "specificDateCondition": {},
        "thankYouPage": {},
        "timeOfDayCondition": {},
        "vcard": {},
        "visitTypeCondition": {},
        "visitorDataCondition": {}
      },
      "rendersPage": false,
      "updatedAt": "2026-10-25T11:15:17.305Z"
    }
  ]
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/qrcode-images:resolve`

Requires auth

## [#](#resolve-qr-code-image-urls)Resolve QR code image URLs

Return freshly signed QR code image URLs for the given links. The URLs expire, so callers fetch them when they need to render rather than storing them. Requires the \`links:read\` scope.

### [#](#resolve-qr-code-image-urls-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#resolve-qr-code-image-urls-request)Request body

linkIds

array<string>

Required

The links to resolve images for. Ids outside the caller's workspace, and links with no generated QR code yet, are simply absent from the response rather than failing the whole batch: a list draws the rows it can.

### [#](#resolve-qr-code-image-urls-response)Response

200

Everything worked as expected.

qrcodeSignedUrls

object

Signed URL by link id. These expire, so treat them as good for this session and ask again rather than persisting them.

### [#](#resolve-qr-code-image-urls-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/qrcode-images:resolve" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"linkIds":["string"]}'
```

Sample payload (application/json)

```json
{
  "linkIds": [
    "string"
  ]
}
```

Typical response

```json
{
  "qrcodeSignedUrls": {}
}
```

Base URL: `https://api.linkbreakers.com`

POST

`/v1/links/thank-you`

Requires auth

## [#](#create-a-new-thank-you-page-link)Create a new thank you page link

This endpoint allows users to create a new link with a thank you page as the exit step. Requires the \`links:write\` scope.

### [#](#create-a-new-thank-you-page-link-parameters)Parameters

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#create-a-new-thank-you-page-link-request)Request body

customDomainId

string

Optional custom domain ID (UUID). Leave empty to use the default domain. Only provide if the user explicitly asks for a specific custom domain.

description

string

Optional description displayed on the thank you page.

directoryId

string

Directory to organize this link into. If empty, link is created at root level.

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty means it never expires. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

id

string

Optional pre-generated link ID (UUID). Same contract as on CreateLinkRequest: the caller may pick the id so a page can navigate to the link before it exists, and it is skipped from the AI tool schema so the model is never invited to invent one.

metadata

object

A map of string key-value pairs. All values must be strings. Nested objects or arrays are not supported. Maximum of 50 keys.

name

string

The name of the link

purpose

string

What the user is trying to achieve with this link, in one or two sentences. The link's assistant conversations read it as context, so it is restated whenever the workflow changes shape.

qrcodeDesignId

string

The QR Code design ID (UUID). If you include this value, the specified design will be associated to this link only. A design can belong to one record at a time (Link or QR Code Template). Trying to use a design that's already assigned will cause an error.

qrcodeEnabled

boolean

Whether the link has a QR code. Defaults to true. When false, the link is created without any QR code: no QR code design is created, no image is generated, qrcode\_design\_id stays empty and qrcode\_signed\_url is never set. The shortlink and workflow are unaffected. qrcode\_template\_id is still stored and used if the QR code is turned on later. Cannot be combined with qrcode\_design\_id or wait\_for\_qrcode=true.

qrcodeTemplateId

string

The ID of the QR Code template (UUID) If not given, the default QR Code template will be used to generate the QR Code design.

shortlink

string

The shortlink for the link If not given, the shortlink will be generated by the system.

tags

array<string>

List of tags to associate with the link. If a tag doesn't exist, it will be created.

title

string

Required

Title displayed on the thank you page. This field is required.

waitForQrcode

boolean

Wait for QR code generation to complete. Note: This makes the request slower compared to asynchronous generation.

### [#](#create-a-new-thank-you-page-link-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

### [#](#create-a-new-thank-you-page-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X POST "https://api.linkbreakers.com/v1/links/thank-you" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"customDomainId":"d290f1ee-6c54-4b01-90e6-d701748f0851","description":"We appreciate your visit.","directoryId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","expiredDestination":"https://example.com/campaign-over","expiresAt":"2026-12-31T23:59:59Z","id":"550e8400-e29b-41d4-a716-446655440000","metadata":{},"name":"Thank You Page Link","purpose":"Thank visitors after a purchase and measure engagement. Good leads: visitors who completed a purchase.","qrcodeDesignId":"a8c5e111-8894-4f8a-b5db-9efe0d12a210","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","shortlink":"thank-you","tags":["string"],"title":"Thank you!","waitForQrcode":true}'
```

Sample payload (application/json)

```json
{
  "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
  "description": "We appreciate your visit.",
  "directoryId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "expiredDestination": "https://example.com/campaign-over",
  "expiresAt": "2026-12-31T23:59:59Z",
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "metadata": {},
  "name": "Thank You Page Link",
  "purpose": "Thank visitors after a purchase and measure engagement. Good leads: visitors who completed a purchase.",
  "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
  "qrcodeEnabled": false,
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "shortlink": "thank-you",
  "tags": [
    "string"
  ],
  "title": "Thank you!",
  "waitForQrcode": true
}
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.307Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.307Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.307Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.307Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.307Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.307Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.307Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.307Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.307Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.307Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.307Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.307Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.307Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.307Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  }
}
```

Base URL: `https://api.linkbreakers.com`

PATCH

`/v1/links/{id}`

Requires auth

## [#](#update-a-link)Update a link

Updates an existing shortened link in your Linkbreakers workspace. Requires the \`links:write\` scope.

### [#](#update-a-link-parameters)Parameters

#### path parameters

id

string

Required

path

The ID of the link to update (UUID)

#### header parameters

Idempotency-Key

string

header

Makes retrying this request safe. See components.parameters.IdempotencyKey.

### [#](#update-a-link-request)Request body

directoryId

string

The ID of the directory to move this link into (UUID)

directoryIdDelete

boolean

Remove the link from its directory (move to root) If true, the directory\_id will be set to null

expiredDestination

string

Where visitors are sent once the link has expired. Empty serves the built-in expired page instead.

expiredDestinationDelete

boolean

Remove the expired destination from this link. If true, expired\_destination is cleared and expired visitors see the built-in expired page instead.

expiresAt

string (date-time)

When the link stops resolving. Empty leaves the current value untouched. Must be in the future. Once it passes the link is removed from the workspace and only the expired destination is served.

expiresAtDelete

boolean

Remove the expiration from this link. If true, expires\_at is cleared and the link stops expiring.

fallbackDestination

string

The fallback destination URL to use when workflow steps are broken

name

string

The new name of the link

pageThemeId

string

Page theme ID to assign to this link

purpose

string

What the user is trying to achieve with this link, in one or two sentences. The link's assistant conversations read it as context, so it is restated whenever the workflow changes shape.

qrcodeEnabled

boolean

Turn the QR code on or off. Omit to leave it unchanged. false permanently deletes the link's QR code image and QR code design (including any customization) and empties qrcode\_design\_id and qrcode\_signed\_url; already printed QR codes keep working because the shortlink does not change. true creates a new QR code design from the link's qrcode\_template\_id (or the default template) and generates the image in the background; earlier customizations are not restored.

qrcodeTemplateId

string

QR code template ID to assign to this link

qrcodeTemplateIdDelete

boolean

Delete the QR code template ID from this link If true, the qrcode\_template\_id will be set to null

tags

array<string>

Set the tags to associate with the link. If a tag with the given name doesn't exist, it will be created.

tagsDelete

boolean

Delete all tags from the link If true, all tags will be removed from the link.

### [#](#update-a-link-response)Response

200

Everything worked as expected.

link

object

Core resource that ties a shortlink or QR entrypoint to its workflow, destination, and analytics metadata, letting Linkbreakers serve dynamic experiences while tracking scans for a workspace.

### [#](#update-a-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X PATCH "https://api.linkbreakers.com/v1/links/{id}" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Idempotency-Key: string" \
  -H "Content-Type: application/json" \
  --data '{"directoryId":"d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f","directoryIdDelete":false,"expiredDestination":"https://example.com/campaign-over","expiredDestinationDelete":false,"expiresAt":"2026-12-31T23:59:59Z","expiresAtDelete":false,"fallbackDestination":"https://example.com/fallback","name":"My Updated Link","pageThemeId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","purpose":"Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.","qrcodeEnabled":false,"qrcodeTemplateId":"0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d","qrcodeTemplateIdDelete":false,"tags":["string"],"tagsDelete":false}'
```

Sample payload (application/json)

```json
{
  "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
  "directoryIdDelete": false,
  "expiredDestination": "https://example.com/campaign-over",
  "expiredDestinationDelete": false,
  "expiresAt": "2026-12-31T23:59:59Z",
  "expiresAtDelete": false,
  "fallbackDestination": "https://example.com/fallback",
  "name": "My Updated Link",
  "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
  "purpose": "Increase newsletter signups. Good leads: marketing qualified leads with budget over $10k.",
  "qrcodeEnabled": false,
  "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
  "qrcodeTemplateIdDelete": false,
  "tags": [
    "string"
  ],
  "tagsDelete": false
}
```

Typical response

```json
{
  "link": {
    "createdAt": "2026-10-25T11:15:17.309Z",
    "customDomain": {
      "activatedAt": "2026-10-25T11:15:17.309Z",
      "certificateExpiresAt": "2026-10-25T11:15:17.309Z",
      "cloudflareHostnameStatus": "active",
      "cloudflareSslStatus": "pending_validation",
      "createdAt": "2026-10-25T11:15:17.309Z",
      "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
      "lastCheckedAt": "2026-10-25T11:15:17.309Z",
      "lastError": "string",
      "name": "example.com",
      "rootDestination": "https://example.com",
      "status": "STATUS_ACTIVE",
      "updatedAt": "2026-10-25T11:15:17.309Z",
      "workspaceId": "d290f1ee-6c54-4b01-90e6-d701748f0851"
    },
    "customDomainId": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "directoryId": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
    "entrypoint": "https://linkbreak.ing/4BnH-R19p",
    "eventCount": 128,
    "expiredDestination": "https://example.com/campaign-over",
    "expiresAt": "2026-12-31T23:59:59Z",
    "fallbackDestination": "https://brand.example.com/fallback",
    "id": "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
    "metadata": {},
    "name": "string",
    "pageTheme": {
      "badgeEnabled": false,
      "badgeIconColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "badgeId": "string",
      "badgeShape": "PAGE_THEME_BADGE_SHAPE_UNSPECIFIED",
      "bodyFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "canvasColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "canvasCoverId": "string",
      "canvasCoverMode": "PAGE_THEME_BACKGROUND_COVER_MODE_UNSPECIFIED",
      "containerConfig": {
        "backgroundColor": {},
        "borderColor": {},
        "borderSize": 0,
        "borderStyle": "PAGE_THEME_BORDER_STYLE_UNSPECIFIED",
        "opacity": 0,
        "variant": "PAGE_THEME_CONTAINER_VARIANT_UNSPECIFIED"
      },
      "containerEnabled": false,
      "createdAt": "2026-10-25T11:15:17.309Z",
      "elementColor": {
        "colors": [],
        "direction": "string",
        "stops": [],
        "type": "THEME_COLOR_TYPE_UNSPECIFIED"
      },
      "elementFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "footerLogoEnabled": false,
      "footerLogoId": "string",
      "id": "string",
      "titleFont": {
        "bold": false,
        "color": {},
        "family": "PAGE_THEME_FONT_FAMILY_UNSPECIFIED",
        "familyStack": "\"Gill Sans\", \"Trebuchet MS\", sans-serif",
        "fontSize": 0,
        "italic": false
      },
      "updatedAt": "2026-10-25T11:15:17.309Z",
      "workspaceId": "string"
    },
    "pageThemeId": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
    "pageThemeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "purpose": "string",
    "qrcodeDesign": {
      "backgroundOptions": {
        "themeColor": {}
      },
      "centralImageMargin": 0,
      "centralImageMediaId": "string",
      "centralImageSignedUrl": "https://example.com",
      "centralImageSize": 0,
      "cornersDotOptions": {
        "themeColor": {},
        "type": "CORNERS_DOT_TYPE_UNSPECIFIED"
      },
      "cornersSquareOptions": {
        "themeColor": {},
        "type": "CORNERS_SQUARE_TYPE_UNSPECIFIED"
      },
      "createdAt": "2026-10-25T11:15:17.309Z",
      "dotsOptions": {
        "themeColor": {},
        "type": "DOTS_TYPE_UNSPECIFIED"
      },
      "errorCorrectionLevel": "string",
      "height": 0,
      "hideBackgroundDots": false,
      "id": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
      "outputFileFormat": "OUTPUT_FILE_FORMAT_PNG",
      "shape": "SHAPE_SQUARE",
      "updatedAt": "2026-10-25T11:15:17.309Z",
      "width": 0
    },
    "qrcodeDesignId": "a8c5e111-8894-4f8a-b5db-9efe0d12a210",
    "qrcodeEnabled": true,
    "qrcodePendingUpdateSince": "2026-10-25T11:15:17.309Z",
    "qrcodeSignedUrl": "https://cdn.linkbreakers.com/qrcodes/1b9d6bcd.png?signature=abc123",
    "qrcodeTemplateId": "0d7f4d9c-1aef-4ed4-821b-321a3f9cba1d",
    "shortlink": "4BnH-R19p",
    "tags": [
      {
        "createdAt": "2026-10-25T11:15:17.309Z",
        "id": "d87a9b30-5c8b-4d4e-9fd3-5f5f5f5f5f5f",
        "name": "string",
        "updatedAt": "2026-10-25T11:15:17.309Z"
      }
    ],
    "updatedAt": "2026-10-25T11:15:17.309Z",
    "workspaceId": "c0d3cafe-5b1e-4d42-a6fd-0c5f5c3962d0"
  }
}
```

Base URL: `https://api.linkbreakers.com`

DELETE

`/v1/links/{id}`

Requires auth

## [#](#delete-a-link)Delete a link

Removes a shortened link from the workspace. This operation cannot be undone. Requires the \`links:write\` scope.

### [#](#delete-a-link-parameters)Parameters

#### path parameters

id

string

Required

path

The ID of the link to delete (UUID)

### [#](#delete-a-link-response)Response

200

Everything worked as expected.

No structured schema available for this section.

### [#](#delete-a-link-error)Error response

400-599

All endpoints may return an unexpected error payload when a request cannot be processed.

error

object

Required

Wrapped error response.

Example request (cURL)

```bash
curl -X DELETE "https://api.linkbreakers.com/v1/links/{id}" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

Typical response

```json
{}
```

Base URL: `https://api.linkbreakers.com`

---

Source: https://linkbreakers.com/help/api/links
