Multi-tenant QR Code & URL Shortening Platform
QRon provides a RESTful API for creating and managing QR codes and shortened URLs. All endpoints return JSON responses and follow standard HTTP status codes.
Base URL: https://qron.me
Currently, the API allows public access for testing. In production, you'll need an API key:
Authorization: Bearer your_api_key_here X-API-Key: your_api_key_here
| Endpoint | Limit | Window |
|---|---|---|
| Create QR Code | 10 requests | 3600 seconds |
| Redirect | 10 requests | 60 seconds |
Create a new QR code with shortened URL.
| Parameter | Type | Required | Description |
|---|---|---|---|
destination_url |
string | Yes | Full URL to redirect to |
application_id |
string | Yes | Application identifier (e.g., 'sis', 'eventkaart', 'platform') |
organisation_id |
string | No | Organisation identifier within application |
title |
string | No | Friendly name for the QR code |
description |
string | No | Description of purpose |
vanity_code |
string | No | Custom short code (4-10 alphanumeric chars) |
passphrase |
string | No | Alternative text-based access (e.g., "bicycle theater overlay") |
expires_at |
string | No | Expiration date (ISO 8601 format) |
collect_location |
boolean | No | Request location before redirect |
require_age_gate |
boolean | No | Require age verification |
created_by |
string | No | Creator identifier |
{
"destination_url": "https://it4vo.nl/sis/dashboard.php?claim_id=A1B2",
"application_id": "sis",
"organisation_id": "5B7A",
"title": "Screen A1B2 Onboarding",
"vanity_code": "SIS-A1B2",
"passphrase": "bicycle theater overlay",
"expires_at": "2026-12-31T23:59:59"
}
{
"success": true,
"id": 42,
"short_code": "SIS-A1B2",
"short_url": "https://qron.me/SIS-A1B2",
"destination_url": "https://it4vo.nl/sis/dashboard.php?claim_id=A1B2",
"passphrase": "bicycle theater overlay",
"created_at": "2025-11-10 16:30:00"
}
Redirect to destination URL and track analytics.
| Parameter | Type | Description |
|---|---|---|
code |
string | Short code (4-10 alphanumeric characters) |
GET https://qron.me/A1B2 → 302 Redirect to destination URL
302 - Successful redirect404 - Code not found410 - Code expired or deactivated429 - Rate limit exceededGet service information and statistics.
{
"service": "qron",
"version": "0.1.0",
"status": "operational",
"stats": {
"active_codes": 247,
"total_scans": 12895
}
}
All errors follow this format:
{
"success": false,
"message": "Error description here"
}
| Code | Description |
|---|---|
| 200 | OK - Request successful |
| 201 | Created - Resource created successfully |
| 400 | Bad Request - Invalid parameters |
| 404 | Not Found - Resource doesn't exist |
| 410 | Gone - Resource expired or deactivated |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error |
curl -X POST https://qron.me/api/create.php \
-H "Content-Type: application/json" \
-d '{
"destination_url": "https://example.com",
"application_id": "platform",
"title": "Example QR Code"
}'
$data = [
'destination_url' => 'https://example.com',
'application_id' => 'platform',
'title' => 'Example QR Code'
];
$ch = curl_init('https://qron.me/api/create.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
$result = json_decode($response, true);
echo $result['short_url']; // https://qron.me/A1B2
const response = await fetch('https://qron.me/api/create.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
destination_url: 'https://example.com',
application_id: 'platform',
title: 'Example QR Code'
})
});
const result = await response.json();
console.log(result.short_url); // https://qron.me/A1B2
For issues or questions, visit: github.com/unieksolutions/qron