API Documentation
Integrate Qurrl.ink’s URL shortening and QR code generation into your applications.
π Quick Start
Get started with the Qurrl API in minutes. Generate an API key from your Dashboard, then make your first request:
curl -X POST https://qurrl.ink/wp-json/qurrl/v1/link/shorten \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/my-long-url"}'
https://qurrl.ink/wp-json/qurrl/v1
π Contents
π Authentication
All API requests require authentication using an API key. Include your key in the X-API-Key header with every request.
π API Key Header
Include this header in all requests:
X-API-Key: your_api_key_here
You can generate API keys from the API tab in your Dashboard. Keep your API keys secure and never expose them in client-side code.
β±οΈ Rate Limiting
Free accounts: 100 requests per hour
Premium accounts: 1,000 requests per hour
Rate limit headers are included in every response: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Create Short Link
Creates a new short link that redirects to your target URL. Optionally specify a custom alias.
Request Parameters
| Parameter | Description |
|---|---|
| urlstringrequired | The destination URL to shorten. Must be a valid URL starting with http:// or https:// |
| aliasstringoptional | Custom short code (3-20 characters, alphanumeric and hyphens only). If not provided, a random code is generated. |
| titlestringoptional | A descriptive title for the link (for your reference in the dashboard) |
Example Request
curl -X POST https://qurrl.ink/wp-json/qurrl/v1/link/shorten \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/very-long-url-path",
"alias": "my-link",
"title": "My Campaign Link"
}'
Example Response
{
"success": true,
"data": {
"short_url": "https://qurrl.ink/my-link",
"short_code": "my-link",
"original_url": "https://example.com/very-long-url-path",
"created_at": "2025-12-21T09:30:00Z"
}
}
Create Dynamic QR Link
Creates a dynamic short link specifically designed for QR codes. The destination can be changed later without reprinting the QR code.
Request Parameters
| Parameter | Description |
|---|---|
| urlstringrequired | The initial destination URL |
| namestringoptional | A name/label for this dynamic QR (e.g., “Restaurant Menu QR”) |
Example Request
curl -X POST https://qurrl.ink/wp-json/qurrl/v1/link/dynamic \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://myrestaurant.com/menu",
"name": "Table QR Menu"
}'
Example Response
{
"success": true,
"data": {
"short_url": "https://qurrl.ink/d/abc123",
"short_code": "abc123",
"original_url": "https://myrestaurant.com/menu",
"name": "Table QR Menu",
"is_dynamic": true,
"created_at": "2025-12-21T09:30:00Z"
}
}
Generate QR Code
Generates a QR code image with extensive customization options including colors, gradients, dot styles, and logo embedding.
Request Parameters
| Parameter | Description |
|---|---|
| datastringrequired | The content to encode (URL, text, vCard, WiFi config, etc.) |
| sizeintegeroptional | Image size in pixels (100-2000). Default: 300 |
| formatstringoptional | Output format: png, svg, base64. Default: png |
| fg_colorstringoptional | Foreground/dots color (hex). Default: #000000 |
| bg_colorstringoptional | Background color (hex). Default: #FFFFFF |
| gradientobjectoptional | Gradient configuration: {"type": "linear"|"radial", "color_start": "#hex", "color_end": "#hex"} |
| dot_stylestringoptional | Dot pattern: square, dots, rounded, classy, classy-rounded, extra-rounded |
| corner_stylestringoptional | Corner square style: square, dot, extra-rounded |
| logo_urlstringoptional | URL of logo image to embed in center |
| logo_sizefloatoptional | Logo size as ratio of QR (0.1-0.4). Default: 0.25 |
Example Request
curl -X POST https://qurrl.ink/wp-json/qurrl/v1/qr/generate \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"data": "https://qurrl.ink",
"size": 500,
"format": "png",
"fg_color": "#0078A1",
"bg_color": "#FFFFFF",
"dot_style": "rounded",
"corner_style": "extra-rounded",
"gradient": {
"type": "linear",
"color_start": "#0078A1",
"color_end": "#00A86B"
}
}'
Example Response
{
"success": true,
"data": {
"qr_url": "https://qurrl.ink/qr-images/abc123.png",
"format": "png",
"size": 500,
"expires_at": "2025-12-28T09:30:00Z"
}
}
Note: Generated QR images are temporarily hosted and expire after 7 days. Download and store them permanently if needed.
Bulk Generate QR Codes
Generate up to 500 QR codes in a single request. Returns a ZIP file containing all generated QR codes.
Request Parameters
| Parameter | Description |
|---|---|
| itemsarrayrequired | Array of objects, each containing data (content) and optional filename |
| sizeintegeroptional | Size for all QR codes (100-2000). Default: 300 |
| formatstringoptional | Output format: png, svg. Default: png |
| styleobjectoptional | Shared style options (fg_color, bg_color, dot_style, etc.) applied to all QRs |
Example Request
curl -X POST https://qurrl.ink/wp-json/qurrl/v1/qr/bulk \
-H "X-API-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"items": [
{"data": "https://example.com/product-1", "filename": "product-1"},
{"data": "https://example.com/product-2", "filename": "product-2"},
{"data": "https://example.com/product-3", "filename": "product-3"}
],
"size": 400,
"format": "png",
"style": {
"fg_color": "#333333",
"dot_style": "rounded"
}
}'
Example Response
{
"success": true,
"data": {
"download_url": "https://qurrl.ink/bulk-downloads/xyz789.zip",
"count": 3,
"expires_at": "2025-12-22T09:30:00Z"
}
}
Error Handling
The API uses standard HTTP response codes to indicate success or failure.
Error Response Format
{
"success": false,
"error": {
"code": "INVALID_URL",
"message": "The provided URL is not valid",
"details": "URL must start with http:// or https://"
}
}
Common Error Codes
| Code | Description |
|---|---|
INVALID_API_KEY | The API key is invalid or has been revoked |
MISSING_API_KEY | No API key was provided in the request |
INVALID_URL | The URL parameter is not a valid URL |
ALIAS_TAKEN | The requested custom alias is already in use |
RATE_LIMIT_EXCEEDED | You’ve exceeded your rate limit |
INVALID_FORMAT | Unsupported output format requested |
SIZE_OUT_OF_RANGE | QR size must be between 100-2000 pixels |
BULK_LIMIT_EXCEEDED | Bulk request exceeds maximum 500 items |
SDKs & Libraries
Official and community SDKs to integrate Qurrl in your favorite language:
Need help? Contact us at support@qurrl.ink or check our Help Center.