Verify QR API
Create verified QR codes automatically, one per event, table, pump or asset.
← What the QR API offers · Your account
How it works
Every registered organisation can use the API. You buy places in your account, and each live code uses one place. Each time your system asks for a code for a new page and identifier, Verify creates it, points it at that page, and sends back the finished PNG. If you have a spare place the code is live straight away. If you do not, the code is still created but is switched off, and we email you (at most once a day) so you can buy more places and switch it on.
- Pages must be on a website you have registered and proved with Verify (or the domain Verify has authorised for your organisation).
- Asking again for the same page and identifier returns the same code and uses no extra place.
- Pages are checked first. A page that Verify rates red cannot have a code.
- The PNG shows your organisation name at the top, your identifier down the right-hand side and https://verify.eazi.it at the bottom.
1. Get an API key
Sign in at your account, find API access and press Create API key. The key is shown once. Keep it secret, like a password; anyone with it can create codes on your account. You can revoke it at any time and have up to five.
2. Request a code
POST https://verify.eazi.it/qr-api.php with the header Authorization: Bearer YOUR_KEY and a JSON body:
| Field | Required | Meaning |
|---|---|---|
url | Yes | Full https:// address of the page the code should lead to. |
identifier | Yes | The identifier printed on the right of the PNG, up to 60 characters (for example Lodge 8325 - 18/10/2026). |
format | No | png (default) returns the image. json returns details with the PNG as base64. |
curl -X POST https://verify.eazi.it/qr-api.php \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.org/events/summer-meeting","identifier":"Lodge 8325 - 18/10/2026"}' \
-o code.png
The response body is the PNG. Details are in the response headers: X-Verify-Code, X-Verify-Scan-Url, X-Verify-Created (true for a new code, false if it already existed) and X-Verify-Remaining (your spare places) and X-Verify-Active (true if the code is live, false if it was created switched off because you had no spare place).
Fetch a code you already have
GET https://verify.eazi.it/qr-api.php?code=ABCD2345 (same header) returns the PNG again.
Check your places
GET https://verify.eazi.it/qr-api.php?action=status returns JSON such as {"ok":true,"codes_purchased":50,"codes_in_use":13,"codes_remaining":37}. These are the places you own, the live codes using them, and your spare places.
PHP example
$ch = curl_init('https://verify.eazi.it/qr-api.php');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $key, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['url' => $eventUrl, 'identifier' => $identifier]),
]);
$png = curl_exec($ch);
if (curl_getinfo($ch, CURLINFO_RESPONSE_CODE) === 200) { file_put_contents('code.png', $png); }
If a page stops working
Verify checks the page when someone scans the code. If the page is permanently gone (HTTP 404, 410 or 451), the code is switched off straight away and the owner is emailed. Temporary problems, such as a slow website, a rate limit (429) or a firewall that blocks the checker (403), do not switch a code off. People who scan it see a clear “this code is switched off” message. Fix the page, then switch the code back on from your account page. Switching it back on costs nothing.
Errors
Errors come back as JSON: {"ok":false,"error":"..."}.
| Status | Meaning |
|---|---|
| 401 | Missing, wrong or revoked key. |
| 402 | Your pool is empty. Buy more codes and reserve them for automation. |
| 403 | The page is not on a website registered for your account. |
| 404 | No live code with that value on your account. |
| 422 | Missing or invalid field, or the page failed the Verify safety check. |
| 429 | Too many requests. Wait and retry. |
| 502 | We could not read the page. Make sure it is online and retry. |
Questions? Use our contact page.