Abundera QR Pro API
REST API referansı: pro.qr.abundera.ai. Dinamik QR kodlarını programatik olarak oluşturun, düzenleyin ve analiz edin. Her şey HTTPS üzerinden JSON, bearer token ile kimlik doğrulama.
/docs/openapi.json, Postman, Insomnia veya herhangi bir OpenAPI 3.1 istemcisine aktarın. Kodlar, Analitik, Gruplar, Ekipler, Webhook'lar ve Kullanıcı genelinde 36 müşteri tarafı uç noktasını kapsar. Yönetici + Stripe-webhook uç noktaları kasıtlı olarak dışarıda bırakılmıştır (yalnızca servisler arası).Giriş
Abundera QR Pro API, dinamik QR kodlarını programatik olarak oluşturmanıza, düzenlemenize ve analiz etmenize olanak tanır, bir geliştiricinin panelden otomatikleştirmek isteyeceği her şey. Ekip yönetimi, faturalandırma ve hesap akışları panel arayüzünde kalır; bu API, geliştirici düzeyindeki kod işlemlerine yöneliktir.
Temel URL: https://pro.qr.abundera.ai/api
İstek formatı: POST / PATCH / DELETE için JSON (Content-Type: application/json).
Yanıt formatı: JSON (application/json; charset=utf-8).
Erişilebilirlik: API erişimi Business+ özelliğidir. Solo planlar paneli kullanabilir, ancak API'yi kullanamaz.
Kimlik doğrulama
Her istek bearer token olarak bir API anahtarı taşır:
Authorization: Bearer abnd_qrpro_...Anahtarları /account/keys sayfasında oluşturun ve iptal edin (Business, Team veya Agency katmanı). Ham abnd_qrpro_... token oluşturma sırasında yalnızca bir kez gösterilir, hemen kaydedin. Yalnızca SHA-256 karmasını saklarız; kayıp anahtarı kurtarmanın yolu yoktur.
Kimliği doğrulanmamış istekler 401 { "error": "not_signed_in" } döndürür. Geçersiz veya iptal edilmiş anahtarlar 401 { "error": "invalid_api_key" } döndürür.
API anahtarları onları oluşturan kullanıcıya özeldir. Bu kullanıcı bir ekibin üyesiyse, aşağıdaki uç noktalar otomatik olarak ekibin kodları üzerinde çalışır (mevcut ekip bağlamı kullanıcı hesabında depolanır ve panel üzerinden yönetilir).
Hız sınırları
API anahtarı başına uygulanır. Her yanıt X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset (pencerenin sıfırlandığı unix saniyesi) başlıklarını taşır.
| Plan | Sınır | Pencere |
|---|---|---|
| Business | 1.000 istek / gün | UTC günü |
| Team | 10.000 istek / gün | UTC günü |
| Agency | 50.000 istek / gün | UTC günü |
| Solo | (403 insufficient_plan) | , |
Bütçe aşan istekler Retry-After başlığıyla birlikte 429 { "error": "rate_limited", "window": "day", "retry_at": 1234567890 } döndürür.
Taramalar hız sınırına tabi değildir, yönlendirme ana yolu (aqr.net/{shortcode}) kimlik doğrulama gerektirmez ve tarama başına bütçe yoktur. Her planın açık bir aylık tarama sınırı vardır (100B / 1M / 10M / 30M). Sınırı aşsanız bile yönlendirme çalışmaya devam eder; yükseltme yapıp yapmamaya karar verebilmeniz için size e-posta göndeririz. Günlük ~10M üzerinde tarama planlıyorsanız kapasite koordinasyonu için bize yazın.
Hatalar
Her hata yanıtı, makine tarafından okunabilir bir error kodu ve ilgili olduğunda ek bağlam içeren JSON formatındadır:
{ "error": "plan_limit", "plan": "business", "limit": 500, "current": 500 }| Durum | Kod | Anlam |
|---|---|---|
| 400 | validation_error | Gövde alanı doğrulamadan geçemedi. Yanıt field + message içerir. |
| 401 | not_signed_in / invalid_api_key | Eksik, geçersiz veya iptal edilmiş bearer token. |
| 402 | plan_limit | Planınızın aktif+duraklatılmış kod sınırına ulaşıldı. Yanıt plan, limit, current içerir. |
| 402 | plan_expired | Hesap 90 günlük tolerans süresini geçmiş; devam etmek için yükseltin. |
| 403 | insufficient_plan | API erişimi Business veya üstünü gerektirir. Solo kullanıcılar bu hatayla karşılaşır. |
| 403 | insufficient_role | Ekip rolünüz istenen değişikliğe izin vermiyor (yönetici+ gerekli). |
| 404 | not_found | Kaynak mevcut değil veya kapsamınızda görünmüyor. |
| 409 | code_not_editable | Kod tolerans veya süresi dolmuş durumda; düzenlemek için yeniden etkinleştirin. |
| 429 | rate_limited | Plan başına günlük bütçe aşıldı. Bkz. Hız sınırları. |
| 500 | internal | İşlenmeyen sunucu hatası, yeniden oluşturulabiliyorsa destek birimine e-posta gönderin. |
Kodlar
Dinamik QR kodları: aqr.net/{shortcode} üzerinden yönlendiren 7 karakterlik Base58 kısa kodu. Her kod, panodan indirebileceğiniz bir statik yedek QR içerir, ödemeyi bırakırsanız bile statik sürüm yönlendirmemize dokunmadan çalışmaya devam eder.
GET /api/codes
Mevcut kapsamınızdaki (kişisel veya şu anda üzerinde çalıştığınız ekip) tüm kodları listeler. Her kod için 30 günlük tarama özeti içeren bir dizi döndürür.
$ curl -H "Authorization: Bearer abnd_qrpro_..." \
https://pro.qr.abundera.ai/api/codes
{
"codes": [
{ "id": "uuid", "shortcode": "aBc123x",
"url": "https://example.com/landing",
"label": "Q2 campaign", "tags": "q2,print",
"status": "active", "scans_30d": 1245,
"created_at": 1713288000, "updated_at": 1713370000 }
],
"plan": "business",
"plan_limit": 500,
"scope": { "type": "user" }
}POST /api/codes
Yeni bir dinamik kod oluşturur. Eklemeden önce planınızın aktif+duraklatılmış kod sınırı kontrol edilir. Minimum gövde:
{ "url": "https://example.com/landing" }Tam özelleştirme (tümü isteğe bağlı):
{ "url": "https://example.com/landing",
"label": "Spring campaign",
"tags": "q2,print",
"qr_type": "url",
"style_json": "{...}",
"logo_key": "instagram",
"frame_style": "scan-me",
"frame_text": "SCAN ME" }Oluşturulan satırı, üretilen shortcode ve yazdırdığınız short_url dahil olmak üzere 201 ile döndürür.
GET /api/codes/{id}
Tek bir kodu getirir. Kapsamınızda değilse 404.
PATCH /api/codes/{id}
Değiştirilebilir herhangi bir alanı günceller. En yaygın kullanım: hâlihazırda yazdırılmış bir kodun hedef URL'sini değiştirmek.
$ curl -X PATCH \
-H "Authorization: Bearer abnd_qrpro_..." \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/new-landing"}' \
https://pro.qr.abundera.ai/api/codes/uuidDeğişiklikler saniyeler içinde yönlendirmeye yansır. PATCH için geçerli status değerleri: "active", "paused". Silmek için DELETE kullanın.
DELETE /api/codes/{id}
Geçici silme. grace_until = şimdi + 90 gün ile status=grace durumuna geçer. Yönlendirme, tolerans penceresi boyunca çalışmaya devam eder, bu, kilitsizlik fiyatlandırma vaadinin somut halidir. 90 gün sonra kod expired olur ve yönlendirme 410 Gone döndürür.
POST /api/codes/import
Bir dizi yük üzerinden toplu oluşturma (qr.abundera.ai üzerindeki "Pro'ya Kaydet" akışı tarafından da kullanılır). Tek bir kod yükü veya dizi kabul eder. Plan sınırı, gruptan önce bir kez kontrol edilir.
Analitik
GET /api/codes/{id}/analytics
Sorgu parametreleri:
range=7d|30d|90d|1y|3y, planınızın saklama süresine göre sınırlıdır (Solo 1y, Business 2y, Team/Agency 3y).granularity=day|hour, saatlik yalnızca Team ve Agency için; saatlik için maksimum 7 günlük pencere.
{
"range": "30d", "days": 30, "granularity": "day",
"total": 4321,
"timeseries": [
{ "bucket": "2026-04-01", "scans": 142 },
{ "bucket": "2026-04-02", "scans": 178 },
...
],
"by_country": [
{ "key": "US", "total": 3012 },
{ "key": "CA", "total": 402 },
{ "key": "Other", "total": 108 }
],
"by_device": [
{ "key": "mobile", "total": 3850 },
{ "key": "tablet", "total": 312 },
{ "key": "desktop", "total": 159 }
]
}Penceredeki 5'ten az taraması olan ülkeler, gizlilik için "Other" altında gruplandırılır (bkz. Gizlilik modeli).
API anahtarları
/account/keys panel sayfasından anahtarları oluşturun ve iptal edin. Programatik öz yönetim API üzerinden salt okunurdur, anahtarlarınızı listeleyebilir ve iptal edebilirsiniz, ancak yeni anahtar oluşturmak için panel gereklidir (tavuk-yumurta sorunu: anahtar oluşturmak için anahtara ihtiyacınız olurdu).
GET /api/keys
API anahtarlarınızı listeler. Ham token'ı asla döndürmez, yalnızca meta verileri.
{
"keys": [
{ "id": "uuid", "label": "Production server",
"created_at": 1713288000, "last_used_at": 1713370000 }
],
"allowed": true,
"plan": "business"
}DELETE /api/keys/{id}
İptal eder. Anahtar hemen çalışmayı durdurur; bundan sonra bu anahtarı taşıyan her istek 401 invalid_api_key döndürür.
Veri dışa aktarma
GET /api/user/export
Tam veri kümenizi içeren bir ZIP indirin, codes.csv (tolerans + süresi dolmuş dahil tüm kodlar), scans.csv (günlük toplam özeti) ve formatı açıklayan bir README.txt. Arşiv application/zip olarak gönderilir; bir dosyaya yönlendirin:
$ curl -H "Authorization: Bearer abnd_qrpro_..." \
-o abundera-qr-export.zip \
https://pro.qr.abundera.ai/api/user/exportİstediğiniz yere yeniden aktarın. Bu, taşınabilir format garantisidir, verilerinize sahipseniz satıcı kilidi mümkün değildir.
Gizlilik modeli
Tarama toplaması, gizlilik hikayesinin tamamıdır. Yönlendirme ana yolunda tarama başına sakladıklarımız:
code_id, hangi kodunuzun tarandığıday_bucket, UTC tarihi (YYYY-MM-DD). Size döndürülen toplamda gün altı hassasiyet yoktur.country, Cloudflare'inCF-IPCountrybaşlığından ISO-3166-1 alpha-2. Şehir, bölge, coğrafi IP araması yok.device_type, kısa bir User-Agent regex'inden sınıflandırılanmobile/tablet/desktop/unknown. Ham UA dizesi sınıflandırma sırasında atılır.scan_count, her isabette upserted toplam sayaç.
Saklamadıklarımız: IP adresleri (karma veya başka türlü), ham User-Agent dizeleri, şehir düzeyinde coğrafi konum, gün altı zaman damgaları, yönlendirici, çerezler, yeniden hedefleme pikselleri veya bireysel tanımlayan herhangi bir vektör. 5'lik gürültü tabanı, küçük toplam yeniden tanımlamayı bastırır.
Team ve Agency katmanları ayrıca hour_bucket (YYYY-MM-DD-HH UTC) ile paralel saatlik toplam yazar. Aynı gizlilik modeli, saatten ince zaman damgası yok, aynı gürültü tabanı, bireysel tarayıcı verisi yok.
Tam hikaye: ücretsiz araç sitesinde /manifesto/ ve /no-lock-in/.