Authentication

Every request needs an API key, sent as a Bearer token in the Authorization header.

Every endpoint on api.zactonz.com requires an API key. Send it on each request in the Authorization header using the Bearer scheme:

Authorization: Bearer YOUR_API_KEY

There are no other credentials, sessions or signatures to manage.

Example#

curl "https://api.zactonz.com/qr/enc/?content=https://zactonz.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
<?php
$ch = curl_init('https://api.zactonz.com/qr/enc/?content=' . rawurlencode('https://zactonz.com'));
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_API_KEY'],
]);
$result = json_decode(curl_exec($ch), true);

Every reference page's samples include the header.

Getting a key#

Create an account in the API console and issue a key for each product you use. A key is scoped to the product it was created for, so a QR key cannot call Screenshot; calls outside that scope are rejected with 403. Keeping one key per product means a leaked key can be rotated or revoked without touching your other integrations.

The console shows a new key once. Rotating a key issues a replacement and keeps the old one working for seven days, or stops it immediately if you choose. Revoking a key stops it at once.

Checking a key#

GET /auth/me/ with the Bearer header returns the key's product, state, plan and the quota remaining today and this month. Use it to confirm a rollout before you switch traffic.

curl "https://api.zactonz.com/auth/me/" \
  -H "Authorization: Bearer YOUR_API_KEY"

Rejected requests#

status Meaning
401 The Authorization header is missing, malformed, or the key is not recognised.
403 The key is valid but not licensed for this endpoint.
406 The key has expired. Contact support to renew it.

The reply body follows the usual shape, with the reason in message:

{ "status": 401, "message": "Missing or invalid API key" }

Existing integrations#

Translator and Mail Verifier also accept the key as a key form field. That form is kept so current integrations keep working; new code should send the header. The retired video endpoints take key as a query parameter only.

Keep keys server-side#

A key sent from browser JavaScript is visible to anyone who opens the developer tools. Call the APIs from your own backend and proxy the result to the browser. Rotate a key through support if it is ever exposed.