---
title: "QR Codes για Developers: REST API, SDK και CLI — qr3.app Blog"
description: "Πώς να δημιουργείτε QR codes προγραμματιστικά, να τα ενσωματώνετε στην εφαρμογή σας και να αντιδράτε σε σαρώσεις μέσω webhooks — μια τεχνική, σε βάθος ανάλυση."
canonical: "https://qr3.app/el/blog/qr-codes-for-developers/"
lang: "el"
robots: "index,follow,max-image-preview:large,max-snippet:-1"
---

# QR Codes για Developers: REST API, SDK και CLI — qr3.app Blog

> Πώς να δημιουργείτε QR codes προγραμματιστικά, να τα ενσωματώνετε στην εφαρμογή σας και να αντιδράτε σε σαρώσεις μέσω webhooks — μια τεχνική, σε βάθος ανάλυση.

Canonical: <https://qr3.app/el/blog/qr-codes-for-developers/>

[← Blog](/el/blog/) [Οδηγοί](/el/blog/category/tutorials/)

8 Μαρτίου 2026 8 λεπτά ανάγνωσης [Οδηγοί](/el/blog/category/tutorials/) [API](/el/blog/tag/API/)[SDK](/el/blog/tag/SDK/)[Developer](/el/blog/tag/Developer/)[Webhooks](/el/blog/tag/Webhooks/)

# QR Codes για Developers: REST API, SDK και CLI

Πώς να δημιουργείτε QR codes προγραμματιστικά, να τα ενσωματώνετε στην εφαρμογή σας και να αντιδράτε σε σαρώσεις μέσω webhooks — μια τεχνική, σε βάθος ανάλυση.

από **qr3.app Team**

![QR Codes για Developers: REST API, SDK και CLI](https://qr3-blog-agent.meistern.workers.dev/cdn/blog/qr-codes-for-developers/hero.png)

Ως developer, δεν θέλετε να δημιουργείτε QR codes χειροκίνητα μέσα από ένα dashboard — θέλετε να τα παράγετε αυτόματα, να τα ενσωματώνετε στο build pipeline σας και να αντιδράτε σε σαρώσεις μέσω webhooks. Ακριβώς γι' αυτό είναι φτιαγμένο το qr3.app.

## Το Stack

Το qr3.app είναι πλήρως Cloudflare-native:

- **API Worker**: Hono πάνω σε Cloudflare Workers (V8 runtime, μηδέν εξαρτήσεις από Node.js)

- **Redirect Worker**: Εξαιρετικά ελαφρύς worker, ανακατευθύνσεις με KV-cache σε < 5ms p50

- **Database**: Cloudflare D1 (SQLite) με multi-tenancy μέσω `workspace_id`

- **Queue**: Τα events σάρωσης αποσυνδέονται μέσω Cloudflare Queues

## Authentication

Όλα τα αιτήματα προς το API απαιτούν ένα Bearer token και ένα workspace ID:

```
POST https://qr3.app/v1/codes
Authorization: Bearer qr3_sk_...
Content-Type: application/json
```

Δημιουργήστε API keys στο [app.qr3.app/dashboard/api-keys](https://app.qr3.app/dashboard/api-keys).

## TypeScript SDK

```
npm install @qr3/sdk
# ή
pnpm add @qr3/sdk
```

```
import { QR3 } from "@qr3/sdk";

const client = new QR3({
  apiKey: process.env.QR3_API_KEY!,
  workspaceId: process.env.QR3_WORKSPACE_ID!,
});

// Create a QR code
const { data: code } = await client.codes.create({
  type: "url",
  url: "https://my-shop.com/product/42",
  title: "Product 42",
  tags: ["shop", "product"],
});

console.log(code.short_code);       // "r7f3Kx"
console.log(code.image_svg_url);    // SVG image URL
console.log(code.redirect_url);     // https://qr3.app/r7f3Kx

// Change URL later (dynamic codes only)
await client.codes.update(code.id, {
  url: "https://my-shop.com/product/42-new",
});

// Query analytics
const stats = await client.codes.stats(code.id, {
  from: "2026-01-01",
  to: "2026-03-31",
});
console.log(stats.data.total_scans); // e.g. 1247
```

## REST API απευθείας

Δεν θέλετε εξάρτηση από το SDK; Το REST API είναι άμεσα αξιοποιήσιμο:

```
# Create a QR code
curl -X POST https://qr3.app/v1/codes \
  -H "Authorization: Bearer $QR3_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "url",
    "url": "https://my-site.com",
    "title": "My Site",
    "is_dynamic": true
  }'

# List all QR codes
curl https://qr3.app/v1/codes?limit=20 \
  -H "Authorization: Bearer $QR3_API_KEY"

# Upload a logo — embedded automatically in SVG and PNG from here on
curl -X POST https://qr3.app/v1/codes/qr_abc123/logo \
  -H "Authorization: Bearer $QR3_API_KEY" \
  -F "file=@logo.png"

# Download QR code as SVG (now includes the logo)
curl "https://qr3.app/v1/codes/r7f3Kx/qr.svg?size=8" \
  -o qrcode.svg
```

## CLI

Για scripting και CI/CD υπάρχει το `@qr3/cli`:

```
npm install -g @qr3/cli
qr3 login

# Create QR code and save as SVG
qr3 codes create --url "https://my-site.com" --title "CI Deploy" --output qr.svg

# Batch creation from CSV
qr3 codes batch import urls.csv --format svg --output ./qr-codes/
```

## Webhooks: Αντιδράστε στις σαρώσεις

Τα webhooks είναι το πιο ισχυρό χαρακτηριστικό: μπορείτε να αντιδράτε σε πραγματικό χρόνο σε κάθε σάρωση.

```
// Register a webhook
const { data: webhook } = await client.webhooks.create({
  url: "https://your-app.com/webhooks/qr3",
  events: ["qr.scanned", "qr.updated"],
});
```

### Webhook Payload

```
{
  "id": "evt_4f0c2a91d7e84b3c9a1f",
  "type": "qr.scanned",
  "created": "2026-03-15T14:30:00.000Z",
  "data": {
    "code_id": "qr_abc123",
    "short_code": "r7f3Kx",
    "scanned_at": "2026-03-15T14:30:00.000Z",
    "country": "DE",
    "device_type": "mobile",
    "os": "iOS",
    "browser": "Safari",
    "language": "de",
    "ab_variant": null,
    "redirected_to": "https://example.com/landing"
  }
}
```

### Επαλήθευση Webhooks (HMAC)

```
import { createHmac, timingSafeEqual } from "crypto";

export async function verifyWebhook(
  payload: string,
  signature: string,
  secret: string,
): Promise<boolean> {
  const expected = createHmac("sha256", secret)
    .update(payload)
    .digest("hex");
  const expectedBytes = Buffer.from(`sha256=${expected}`);
  const receivedBytes = Buffer.from(signature);
  return (
    expectedBytes.length === receivedBytes.length &&
    timingSafeEqual(expectedBytes, receivedBytes)
  );
}
```

## Rate Limiting

Κάθε κλειδί API μπορεί να στέλνει 60 αιτήματα ανά λεπτό, σε όλα τα πλάνα. Η δημιουργία κωδικών έχει επίσης ένα ημερήσιο όριο ανά χώρο εργασίας, το ίδιο σε κάθε πλάνο: το `POST /v1/codes` δέχεται νέους κωδικούς μέχρι να δημιουργηθούν 200 εκείνη την ημέρα, το `POST /v1/codes/batch` έως 10.000.

Κάθε επικυρωμένη απόκριση περιλαμβάνει το `X-RateLimit-Limit`. Μια απόκριση `429` αναφέρει επιπλέον πότε μπορείτε να δοκιμάσετε ξανά:

```
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1710510060
Retry-After: 60
```

## Μορφή σφαλμάτων (RFC 7807)

Όλα τα σφάλματα ακολουθούν το [RFC 7807 Problem Details](https://www.rfc-editor.org/rfc/rfc7807):

```
{
  "type": "https://docs.qr3.app/errors/validation",
  "title": "Validation Error",
  "status": 422,
  "detail": "url is required for type 'url'",
  "errors": [
    { "field": "url", "message": "Required" }
  ]
}
```

## Συμπέρασμα

Το qr3.app είναι φτιαγμένο εξαρχής ως εργαλείο για developers: ανοιχτό REST API, SDK με TypeScript-first προσέγγιση, CLI, webhooks και πλήρης τεκμηρίωση OpenAPI. Ρίξτε μια ματιά στην [τεκμηρίωση του API](https://docs.qr3.app/en/api/) ή ξεκινήστε από το [Dashboard](https://app.qr3.app/dashboard).

[← Όλα τα άρθρα](/el/blog/) [Ξεκίνα δωρεάν](https://app.qr3.app/sign-up)
