Abundera QR Pro/ Documentation

Abundera QR Pro API

เอกสารอ้างอิง REST API สำหรับ pro.qr.abundera.ai สร้าง แก้ไข และวิเคราะห์ QR code แบบไดนามิกผ่านโปรแกรม ทุกอย่างเป็น JSON ผ่าน HTTPS และยืนยันตัวตนด้วย bearer token

อัปเดตล่าสุด: 2026-04-18 · support@abundera.ai · OpenAPI 3.1 spec (JSON) · SDK ทางการ (TS / Python / Go)

สเปกที่อ่านได้ด้วยเครื่อง:/docs/openapi.json, นำเข้าใน Postman, Insomnia หรือ client ที่รองรับ OpenAPI 3.1 ครอบคลุม 36 endpoint สำหรับลูกค้าใน Codes, Analytics, Groups, Teams, Webhooks และ User โดยไม่รวม endpoint ของ Admin และ Stripe-webhook (สำหรับบริการถึงบริการเท่านั้น)

บทนำ

Abundera QR Pro API ช่วยให้คุณสร้าง แก้ไข และวิเคราะห์ QR code แบบไดนามิกผ่านโปรแกรม ทุกอย่างที่นักพัฒนาต้องการทำอัตโนมัติจาก dashboard การจัดการทีม การเรียกเก็บเงิน และขั้นตอนบัญชีอยู่ใน UI ของ dashboard; API นี้จำกัดเฉพาะการดำเนินการ code ระดับนักพัฒนา

Base URL: https://pro.qr.abundera.ai/api

รูปแบบคำขอ: JSON (Content-Type: application/json) สำหรับ POST / PATCH / DELETE

รูปแบบการตอบกลับ: JSON (application/json; charset=utf-8).

ความพร้อมใช้งาน: การเข้าถึง API เป็นคุณสมบัติของ Business ขึ้นไป แผน Solo ใช้ dashboard ได้แต่ไม่สามารถเข้าถึง API ได้

การยืนยันตัวตน

ทุกคำขอต้องแนบ API key เป็น bearer token:

Authorization: Bearer abnd_qrpro_...

สร้างและเพิกถอน key ได้ที่ /account/keys (แผน Business, Team หรือ Agency) โทเค็น abnd_qrpro_... ดิบแสดงเพียงครั้งเดียวเมื่อสร้าง โปรดเก็บทันที เราจัดเก็บเฉพาะ SHA-256 hash ของมัน และไม่มีวิธีกู้คืน key ที่สูญหาย

คำขอที่ไม่ผ่านการยืนยันตัวตนจะคืนค่า 401 { "error": "not_signed_in" } คำขอที่ใช้ key ไม่ถูกต้องหรือถูกเพิกถอนจะคืนค่า 401 { "error": "invalid_api_key" }.

API key ถูกจำกัดขอบเขตไว้กับผู้ใช้ที่สร้างมัน หากผู้ใช้นั้นเป็นสมาชิกของทีม endpoint ด้านล่างจะดำเนินการกับ code ของทีมโดยอัตโนมัติ (บริบททีมปัจจุบันจัดเก็บในบัญชีผู้ใช้และจัดการผ่าน dashboard)

อัตราจำกัด

บังคับใช้ต่อ API key ทุกการตอบกลับมี X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset (unix seconds เมื่อหน้าต่างรีเซ็ต)

แผนจำกัดหน้าต่าง
Business1,000 คำขอ / วันUTC วัน
Team10,000 คำขอ / วันUTC วัน
Agency50,000 คำขอ / วันUTC วัน
Solo(403 insufficient_plan),

คำขอที่เกินงบประมาณจะคืนค่า 429 { "error": "rate_limited", "window": "day", "retry_at": 1234567890 } พร้อม header Retry-After เป็นวินาที

การสแกนไม่มีอัตราจำกัด, เส้นทาง redirect หลัก (aqr.net/{shortcode}) ไม่ต้องยืนยันตัวตนและไม่มีงบประมาณต่อการสแกน แต่ละแผนมีจำนวนสแกนต่อเดือนที่กำหนดไว้ชัดเจน (100K / 1M / 10M / 30M) หากเกินจำนวน redirect ยังคงทำงาน เราจะส่งอีเมลให้คุณตัดสินใจว่าจะอัปเกรดหรือรอให้ผ่านช่วงพีคชั่วคราว หากวางแผนเกิน ~10M การสแกนต่อวัน ติดต่อเรา เพื่อประสานงานด้านความจุ

ข้อผิดพลาด

ทุกการตอบกลับข้อผิดพลาดเป็น JSON พร้อมรหัส error ที่อ่านได้ด้วยเครื่องและข้อมูลเพิ่มเติมตามกรณี:

{ "error": "plan_limit", "plan": "business", "limit": 500, "current": 500 }
สถานะรหัสความหมาย
400validation_errorฟิลด์ใน body ผ่านการตรวจสอบไม่ผ่าน การตอบกลับมี field + message
401not_signed_in / invalid_api_keybearer token หายไป ไม่ถูกต้อง หรือถูกเพิกถอน
402plan_limitถึงจำนวน code สูงสุดที่ใช้งาน+หยุดชั่วคราวของแผนแล้ว การตอบกลับมี plan, limit, current
402plan_expiredบัญชีเกินระยะผ่อนผัน 90 วัน อัปเกรดเพื่อดำเนินการต่อ
403insufficient_planการเข้าถึง API ต้องการ Business ขึ้นไป ผู้ใช้ Solo จะพบข้อผิดพลาดนี้
403insufficient_roleบทบาทในทีมของคุณไม่อนุญาตให้แก้ไขที่ร้องขอ (ต้องการ admin ขึ้นไป)
404not_foundทรัพยากรไม่มีอยู่หรือไม่ปรากฏในขอบเขตของคุณ
409code_not_editablecode อยู่ในสถานะผ่อนผันหรือหมดอายุ เปิดใช้งานอีกครั้งเพื่อแก้ไข
429rate_limitedPer-plan daily budget exceeded. See อัตราจำกัด.
500internalข้อผิดพลาดเซิร์ฟเวอร์ที่ไม่ได้จัดการ, ส่งอีเมลฝ่ายสนับสนุนหากเกิดซ้ำ

Codes

QR code แบบไดนามิก: shortcode Base58 ขนาด 7 ตัวอักษรที่เปลี่ยนเส้นทางผ่าน aqr.net/{shortcode} ทุก code มี QR สำรองแบบสแตติกที่ดาวน์โหลดได้จาก dashboard หากคุณหยุดชำระเงิน เวอร์ชันสแตติกยังคงใช้งานได้โดยไม่ผ่าน redirect ของเรา

GET /api/codes

แสดงรายการ code ทั้งหมดในขอบเขตปัจจุบันของคุณ (ส่วนตัว หรือทีมที่กำลังใช้งานอยู่) คืนค่าเป็น array พร้อมสรุปการสแกน 30 วันต่อ code

$ 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

สร้าง code แบบไดนามิกใหม่ จำนวน code สูงสุดที่ใช้งาน+หยุดชั่วคราวของแผนจะถูกตรวจสอบก่อนแทรก body ขั้นต่ำ:

{ "url": "https://example.com/landing" }

ปรับแต่งเต็มรูปแบบ (ทั้งหมดไม่บังคับ):

{ "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" }

คืนค่า 201 + แถวที่สร้างพร้อม shortcode ที่สร้างขึ้นและ short_url สำหรับพิมพ์

GET /api/codes/{id}

ดึง code เดียว คืนค่า 404 หากไม่อยู่ในขอบเขตของคุณ

PATCH /api/codes/{id}

อัปเดตฟิลด์ที่แก้ไขได้ การใช้งานที่พบบ่อยที่สุด: เปลี่ยน URL ปลายทางของ code ที่พิมพ์แล้ว

$ 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/uuid

การเปลี่ยนแปลงจะมีผลกับ redirect ภายในไม่กี่วินาที ค่า status ที่ใช้ได้สำหรับ PATCH: "active", "paused" หากต้องการลบ ใช้ DELETE

DELETE /api/codes/{id}

ลบแบบ soft-delete ย้ายไปเป็น status=grace โดย grace_until = now + 90 วัน redirect ยังคงทำงานตลอดระยะผ่อนผัน นี่คือคำสัญญาราคาแบบไม่ล็อกผู้ใช้ที่เป็นรูปธรรม หลังจาก 90 วัน code จะกลายเป็น expired และ redirect จะคืนค่า 410 Gone

POST /api/codes/import

สร้างจำนวนมากจาก array payload (ใช้ในขั้นตอน "บันทึกไปยัง Pro" บน qr.abundera.ai ด้วย) รับ payload ของ code เดียวหรือ array ตรวจสอบขีดจำกัดแผนครั้งเดียวก่อนประมวลผลชุด

Analytics

GET /api/codes/{id}/analytics

พารามิเตอร์คำขอ:

  • range=7d|30d|90d|1y|3y, จำกัดตามการเก็บข้อมูลของแผน (Solo 1 ปี, Business 2 ปี, Team/Agency 3 ปี)
  • granularity=day|hour, รายชั่วโมงสำหรับ Team และ Agency เท่านั้น; หน้าต่างสูงสุด 7 วันสำหรับรายชั่วโมง
{
  "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 }
  ]
}

Countries with fewer than 5 scans in the window are folded into "Other" for privacy (see โมเดลความเป็นส่วนตัว).

API keys

สร้างและเพิกถอน key จากหน้า dashboard /account/keys การจัดการตนเองผ่านโปรแกรมผ่าน API อยู่ในโหมดอ่านอย่างเดียว คุณสามารถแสดงรายการและเพิกถอน key ได้ แต่การสร้าง key ใหม่ต้องใช้ dashboard (ปัญหาไก่กับไข่: ต้องใช้ key เพื่อสร้าง key)

GET /api/keys

แสดงรายการ API key ของคุณ ไม่คืนค่าโทเค็นดิบ, แค่ metadata เท่านั้น

{
  "keys": [
    { "id": "uuid", "label": "Production server",
      "created_at": 1713288000, "last_used_at": 1713370000 }
  ],
  "allowed": true,
  "plan": "business"
}

DELETE /api/keys/{id}

เพิกถอน key หยุดทำงานทันที คำขอที่ใช้ key นี้จะคืนค่า 401 invalid_api_key ในภายหลัง

ส่งออกข้อมูล

GET /api/user/export

ดาวน์โหลด ZIP ที่มีชุดข้อมูลทั้งหมดของคุณ, codes.csv (ทุก code รวมถึงผ่อนผัน + หมดอายุ), scans.csv (สรุปรายวันรวม) และ README.txt ที่อธิบายรูปแบบ ไฟล์บีบอัดเป็น application/zip; ส่งต่อไปยังไฟล์:

$ curl -H "Authorization: Bearer abnd_qrpro_..." \
       -o abundera-qr-export.zip \
       https://pro.qr.abundera.ai/api/user/export

นำเข้าได้ทุกที่ นี่คือการรับประกันรูปแบบพกพา, ไม่มีการล็อกผู้ใช้กับผู้ให้บริการหากคุณเป็นเจ้าของข้อมูล

โมเดลความเป็นส่วนตัว

ข้อมูลสรุปการสแกนคือภาพรวมความเป็นส่วนตัวทั้งหมด สิ่งที่เราจัดเก็บต่อการสแกนในเส้นทาง redirect หลัก:

  • code_id, code ใดของคุณถูกสแกน
  • day_bucket, วันที่ UTC (YYYY-MM-DD) ไม่มีความละเอียดย่อยกว่าวันในข้อมูลสรุปที่คืนให้คุณ
  • country, ISO-3166-1 alpha-2 จาก header CF-IPCountry ของ Cloudflare ไม่มีข้อมูลเมือง ภูมิภาค หรือการค้นหา geo-IP
  • device_type, mobile / tablet / desktop / unknown จำแนกด้วย User-Agent regex สั้น สตริง UA ดิบถูกทิ้งทันทีหลังจำแนก
  • scan_count, ตัวนับสรุป อัปเดตทุกครั้งที่มีการสแกน

สิ่งที่เราไม่จัดเก็บ: ที่อยู่ IP (ทั้งแบบ hash และอื่น ๆ), สตริง User-Agent ดิบ, ข้อมูลภูมิศาสตร์ระดับเมือง, timestamp ย่อยกว่าวัน, referer, cookie, retargeting pixel หรือข้อมูลระบุตัวตนใด ๆ ระดับต่ำสุดที่ 5 การสแกนป้องกันการระบุตัวตนจากข้อมูลกลุ่มเล็ก

แผน Team และ Agency จะเขียนข้อมูลสรุปรายชั่วโมงแบบขนานพร้อม hour_bucket (YYYY-MM-DD-HH UTC) ด้วย โมเดลความเป็นส่วนตัวเดิม, ไม่มี timestamp ละเอียดกว่าชั่วโมง ระดับต่ำสุดเดิม ไม่มีข้อมูลผู้สแกนรายบุคคล

อ่านรายละเอียดเพิ่มเติม: /manifesto/ และ /no-lock-in/ บนเว็บไซต์ Free Tool