Download OpenAPI specification:
DyLy Link API
Creates a DyLy short link belonging to the authenticated project.
Supported link types
url: Redirects the visitor to destinationUrl.json: Returns the JSON payload stored in rawJson.jwt: Returns a signed JWT built from jwtClaims. When destinationUrl is supplied the JWT is delivered via the redirect target; otherwise it is returned inline. Implicit flow appends the token to the fragment, while code flow issues a one-time authorization code.deep: Issues a deep link with a signed token query string for downstream validation. If the app is not installed the user is redirected to destinationUrl.Validation and defaults
projectId must belong to the caller. Authorization failures return 401 or 403.domain is normalized to lowercase and must be registered for the project. When omitted the project's default domain is used.expiresIn) defaults to unlimited access when capabilities allow. If the project cannot control TTL, the service forces a 24 hour TTL. A positive TTL must be at least 60 seconds.jwt links jwtClaims are required. Providing a destinationUrl also requires flow; setting flow: code additionally requires clientType. A secure code verifier is generated automatically for code flow.json links rawJson must contain a valid payload within platform limits (depth ≤ 4, arrays ≤ 10 items, string length ≤ 192 characters).url and deep links destinationUrl must be an absolute http(s) URL.oneTime and keyProtected require the corresponding project capability. If the project lacks the capability the value is coerced to false. When keyProtected is enabled the returned shortUrl contains a key query string parameter.path values must match the documented pattern. When omitted a unique path is generated.Response
codeVerifier.Rate limiting & quotas
429 or 403 responses depending on the violation.| Authorization required | string non-empty Example: Basic YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo6MTIzNDU2Nzg5MA== HTTP Basic authentication using the DyLy client credentials. Format: |
| projectId required | string <uuid> = 36 characters GUID of the project that owns the link. Must match the authenticated project context and must be a valid UUID v4 format. |
| type required | string Enum: "url" "json" "jwt" "deep" Link type to create. Supported values: |
| domain | string [ 1 .. 255 ] characters Domain that will host the link (e.g., |
| destinationUrl | string [ 1 .. 1024 ] characters Absolute HTTP(S) URL to redirect to. Required for |
| path | string [ 1 .. 110 ] characters Optional custom path (1–3 segments of lowercase letters, digits, |
| rawJson | object JSON payload returned when the link is accessed. Required for |
| jwtClaims | object Claims to include in JWT responses. Required for |
| jwtExpiresIn | number [ 300 .. 86400 ] Lifetime of the issued JWT in seconds. Accepts values between 300 (5 minutes) and 86,400 (24 hours). Defaults to 900 (15 minutes). |
| expiresIn | number [ 0 .. 31536000 ] Lifetime of the link in seconds. |
| oneTime | boolean Default: false When |
| keyProtected | boolean Default: false When |
| flow | string Enum: "implicit" "code" JWT retrieval flow when |
| clientType | string Enum: "public" "confidential" Required when |
{- "projectId": "11111111-1111-1111-1111-111111111111",
- "type": "json",
- "domain": "myproject.dyly.dev",
- "path": "my-custom-path",
- "rawJson": { },
- "jwtClaims": { },
- "jwtExpiresIn": 900,
- "expiresIn": 3600,
- "oneTime": true,
- "keyProtected": true,
- "flow": "code",
- "clientType": "confidential"
}{- "projectId": "11111111-1111-1111-1111-111111111111",
- "path": "my-custom-path",
- "rawJson": { },
- "jwtClaims": { },
- "alias": "bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u",
- "expiresIn": 3600,
- "jwtExpiresIn": 900,
- "createdAt": "2024-01-15T10:30:00Z",
- "oneTime": true,
- "type": "json",
- "keyProtected": true,
- "flow": "code",
- "domain": "myproject.dyly.dev",
- "codeVerifier": "generatedVerifier456",
- "clientType": "confidential"
}Retrieves paginated short links for the specified domain within the authenticated project.
domain must belong to the project.maxItemCount defaults to 100 items and higher values are clipped to that maximum.continuationToken should be the string value returned by the previous page. Omit it to receive the first page.| domain required | string [ 1 .. 255 ] characters Example: domain=myproject.dyly.dev Fully qualified domain name that owns the links to return (e.g., |
| maxItemCount | integer [ 1 .. 100 ] Default: 100 Example: maxItemCount=50 Maximum number of links to return per page. Defaults to 100 and must be between 1 and 100. Values above 100 are coerced to 100. |
| continuationToken | string <= 256 characters Opaque continuation token returned by a previous |
| Authorization required | string non-empty Example: Basic YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo6MTIzNDU2Nzg5MA== HTTP Basic credentials ( |
{- "projectId": "11111111-1111-1111-1111-111111111111",
- "continuationToken": "token123abc",
- "links": [
- {
- "projectId": "11111111-1111-1111-1111-111111111111",
- "path": "my-custom-path",
- "rawJson": { },
- "jwtClaims": { },
- "alias": "bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u",
- "expiresIn": 3600,
- "jwtExpiresIn": 900,
- "createdAt": "2024-01-15T10:30:00Z",
- "oneTime": true,
- "type": "json",
- "keyProtected": true,
- "flow": "code",
- "domain": "myproject.dyly.dev",
- "codeVerifier": "generatedVerifier456",
- "clientType": "confidential"
}
]
}Permanently deletes a short link and any stored sessions tied to the alias. The operation is idempotent for authorized callers.
| alias required | string [ 1 .. 1024 ] characters Example: bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u The unique identifier (alias) of the link to delete. This is the base64-encoded value returned when the link was created. Accepts alphanumeric characters, hyphens, underscores, and equals signs. |
| Authorization required | string non-empty Example: Basic YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo6MTIzNDU2Nzg5MA== HTTP Basic credentials ( |
{- "errorCode": "INVALID_PARAMETER",
- "errorMessage": "The provided alias does not match the required format",
- "correlationId": "33333333-3333-3333-3333-333333333333"
}Retrieves the latest metadata for a short link identified by its alias. Use this endpoint to confirm TTL, key protection, client type, and generated code verifier values.
| alias required | string [ 1 .. 1024 ] characters Example: bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u The unique identifier (alias) of the link to retrieve. This is the base64-encoded value returned when the link was created. |
| Authorization required | string non-empty Example: Basic YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo6MTIzNDU2Nzg5MA== HTTP Basic credentials ( |
{- "projectId": "11111111-1111-1111-1111-111111111111",
- "path": "my-custom-path",
- "rawJson": { },
- "jwtClaims": { },
- "alias": "bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u",
- "expiresIn": 3600,
- "jwtExpiresIn": 900,
- "createdAt": "2024-01-15T10:30:00Z",
- "oneTime": true,
- "type": "json",
- "keyProtected": true,
- "flow": "code",
- "domain": "myproject.dyly.dev",
- "codeVerifier": "generatedVerifier456",
- "clientType": "confidential"
}Updates mutable properties of an existing short link identified by its alias.
Updatable properties:
destinationUrl: Can only be changed if originally specified. Cannot be added if the link was created without it, and cannot be removed once set.rawJson: Only for links of type: json. Updates the JSON payload returned when the link is accessed.jwtClaims: Only for links of type: jwt. Updates the JWT claims used to generate tokens.jwtExpiresIn: Only for links of type: jwt. Updates the JWT token expiration time (in seconds).expiresIn: Updates the link's time-to-live. If the project lacks the LinkTtl capability, this value may be ignored or coerced to a default of 24 hours. Positive values must be at least 60 seconds.Immutable properties:
The following properties cannot be changed after creation: projectId, domain, path, alias, type, oneTime, keyProtected, flow, clientType.
Validation:
alias must belong to a link in the authenticated project.type (e.g., rawJson can only update json links).Response: Returns the updated link metadata in the same format as link creation and retrieval.
| alias required | string [ 1 .. 1024 ] characters Example: bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u The unique identifier (alias) of the link to update. This is the base64-encoded value returned when the link was created. |
| Authorization required | string non-empty Example: Basic YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXo6MTIzNDU2Nzg5MA== HTTP Basic credentials ( |
| destinationUrl | string <uri> [ 1 .. 1024 ] characters The destination URL to redirect users to. Can only be updated if the link was originally created with a |
| rawJson | object JSON payload returned when accessing the link. Only for links with |
| jwtClaims | object JWT claims to include in generated tokens. Only for links with |
| jwtExpiresIn | integer [ 300 .. 86400 ] JWT token expiration time in seconds. Only for links with |
| expiresIn | integer [ 0 .. 31536000 ] Link time-to-live in seconds. Zero indicates unlimited (if project capabilities allow). Positive values must be at least 60 seconds. Maximum is 31536000 (1 year). Projects without the LinkTtl capability may have this value coerced to 24 hours. |
{- "rawJson": {
- "key": "updated-value"
}, - "jwtClaims": {
- "sub": "user-123",
- "role": "admin"
}, - "jwtExpiresIn": 1800,
- "expiresIn": 7200
}{- "projectId": "11111111-1111-1111-1111-111111111111",
- "path": "my-custom-path",
- "rawJson": { },
- "jwtClaims": { },
- "alias": "bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u",
- "expiresIn": 3600,
- "jwtExpiresIn": 900,
- "createdAt": "2024-01-15T10:30:00Z",
- "oneTime": true,
- "type": "json",
- "keyProtected": true,
- "flow": "code",
- "domain": "myproject.dyly.dev",
- "codeVerifier": "generatedVerifier456",
- "clientType": "confidential"
}Exchanges a one-time authorization code for a signed JWT issued for the specified short link alias.
clientSecret; public clients must provide the codeVerifier that was generated during link creation.code value is single-use and expires shortly after issuance. Requests with an incorrect code, mismatched alias, or mismatched client type return 400.| alias required | string [ 1 .. 1024 ] characters Example: bXlwcmlqZWN0LmR5bHkuYXBwIy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9u The unique identifier (alias) of the JWT-protected link. This is the base64-encoded value associated with the authorization code. |
| code required | string = 32 characters One-time authorization code to exchange for a JWT. Codes are exactly 32 characters, expire shortly after issuance, and can only be used once. |
| clientId required | string <uuid> = 36 characters Client application identifier (UUID v4). Must correspond to the client configured for the link and be a valid UUID format. |
| clientType required | string Enum: "public" "confidential" Classification of the client making the request. Accepts |
| clientSecret | string [ 64 .. 96 ] characters Required when |
| codeVerifier | string [ 1 .. 256 ] characters PKCE code verifier tied to the authorization code. Mandatory for |
{- "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
}