API Documentation

All APIs return UTF-8 JSON. Authentication via X-API-Key or Authorization: Bearer <api_key>.

Base URL: https://tapy.cc

POST /api/v1/qrcodes

Enable QR code generation for a specific short_code or update its settings.

Body JSON

{"short_code":"Ab3xK9q"}

Plan rule: on Free plan, custom_code is ignored and a random short code is generated automatically.

Response 201

{"short_code":"Ab3xK9q","has_qr":1,"message":"QR Code abilitato per il link selezionato."}

GET /api/v1/qrcodes

Retrieve the list of all short links for which a QR code has been enabled.

Response 200

{"data":[{"short_code":"abc123","destination_url":"https://example.com","title":"Landing","has_qr":1}]}

Standard errors

  • 401 Missing or invalid API key
  • 403 Monthly plan limit for QR code creation exceeded.
  • 404 Link not found
  • 409 Short code in use / plan limit reached
  • 422 Invalid URL

Info

Visual rendering of the QR (images, colors) must currently be generated via the web interface or client libraries. The API tracks the links the QR has been associated with via the `has_qr: 1` flag and calculates active limits against your account.

PHP smoke example

Full smoke-style example for QR Codes endpoints (replace placeholder with your API key).

<?php

declare(strict_types=1);

$baseUrl = 'https://tapy.cc';
$apiKey = 'YOUR_API_KEY'; // replace with your key

function request_json(string $method, string $url, string $apiKey, ?array $payload = null): array
{
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);

    $headers = [
        'Accept: application/json',
        'X-API-Key: ' . $apiKey,
    ];

    if ($payload !== null) {
        $headers[] = 'Content-Type: application/json';
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload, JSON_UNESCAPED_SLASHES));
    }

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $raw = curl_exec($ch);
    $status = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);

    return [$status, json_decode((string) $raw, true) ?: ['raw' => $raw]];
}

// Step 1 – Create a short link first
[$createStatus, $createBody] = request_json('POST', $baseUrl . '/api/v1/shorten', $apiKey, [
    'url' => 'https://example.com',
    'title' => 'QR Demo',
]);
echo "POST /api/v1/shorten => HTTP {$createStatus}\n";
print_r($createBody);

$code = (string) $createBody['short_code'];

// Step 2 – Enable QR code for this link
[$qrStatus, $qrBody] = request_json('POST', $baseUrl . '/api/v1/qrcodes', $apiKey, [
    'short_code' => $code,
]);
echo "POST /api/v1/qrcodes => HTTP {$qrStatus}\n";
print_r($qrBody);

// Step 3 – List all QR-enabled links
[$listStatus, $listBody] = request_json('GET', $baseUrl . '/api/v1/qrcodes', $apiKey);
echo "GET /api/v1/qrcodes => HTTP {$listStatus}\n";
print_r($listBody);

Output atteso

Indicative CLI output when the API sequence succeeds.

POST /api/v1/shorten => HTTP 201
Array
(
    [short_code] => Ab3xK9q
    [short_url] => https://tapy.cc/Ab3xK9q
    [destination_url] => https://example.com
)

POST /api/v1/qrcodes => HTTP 201
Array
(
    [short_code] => Ab3xK9q
    [has_qr] => 1
    [message] => QR Code abilitato per il link selezionato.
)

GET /api/v1/qrcodes => HTTP 200
Array
(
    [data] => Array
        (
            [0] => Array
                (
                    [short_code] => Ab3xK9q
                    [destination_url] => https://example.com
                    [title] => QR Demo
                    [has_qr] => 1
                )
        )
)