Abundera QR Pro/ Documentation

Abundera QR Pro API

REST API -viite palvelulle pro.qr.abundera.ai. Luo, muokkaa ja analysoi dynaamisia QR-koodeja ohjelmallisesti. Kaikki on JSON HTTPS:n yli, todennettu bearer-tokenilla.

Päivitetty viimeksi: 18.4.2026 · support@abundera.ai · OpenAPI 3.1 -spesifikaatio (JSON) · Viralliset SDK:t (TS / Python / Go)

Machine-readable spec:/docs/openapi.json, import into Postman, Insomnia, or any OpenAPI 3.1 client. Covers 36 customer-facing endpoints across Codes, Analytics, Groups, Teams, Webhooks, and User. Admin + Stripe-webhook endpoints are intentionally excluded (service-to-service only).

Johdanto

Abundera QR Pro -rajapinta antaa sinun luoda, muokata ja analysoida dynaamisia QR-koodeja ohjelmallisesti, kaikki mitä kehittäjä haluaa automatisoida koontinäytöstä. Tiimin hallinta, laskutus ja tilivirtaukset pysyvät koontinäytön käyttöliittymässä; tämä rajapinta on suhteutettu kehittäjätason koodioperaatioihin.

Perus-URL: https://pro.qr.abundera.ai/api

Pyyntömuoto: JSON (Content-Type: application/json) on POST / PATCH / DELETE.

Vastausmuoto: JSON (application/json; charset=utf-8).

Saatavuus: Rajapintakäyttö on Business+-ominaisuus. Solo-suunnitelmat voivat käyttää koontinäyttöä, mutta eivät rajapintaa.

Todennus

Jokainen pyyntö kantaa API-avainta bearer-tokenina:

Authorization: Bearer abnd_qrpro_...

Luo ja peruuta avaimia osoitteessa /account/keys (Business-, Team- tai Agency-taso). Raaka abnd_qrpro_... -token näytetään täsmälleen kerran luonnin yhteydessä, tallenna se heti. Tallennamme vain sen SHA-256-tiivisteen; kadonnutta avainta ei voi palauttaa.

Unauthenticated requests return 401 { "error": "not_signed_in" }. Invalid or revoked keys return 401 { "error": "invalid_api_key" }.

API-avaimet on suhteutettu niitä luoneelle käyttäjälle. Jos kyseinen käyttäjä on tiimin jäsen, alla olevat päätepisteet toimivat automaattisesti tiimin koodeihin (nykyisen tiimin konteksti tallennetaan käyttäjätilille ja hallitaan koontinäytön kautta).

Nopeusrajoitukset

Pakotettu API-avainkohtaisesti. Jokainen vastaus sisältää X-RateLimit-Limit-, X-RateLimit-Remaining- ja X-RateLimit-Reset-otsakkeet (unix-sekunnit, kun ikkuna nollautuu).

SuunnitelmaRajaIkkuna
Business1 000 pyyntöä / pvUTC-päivä
Team10 000 pyyntöä / pvUTC-päivä
Agency50 000 pyyntöä / pvUTC-päivä
Solo(403 insufficient_plan),

Over-budget requests return 429 { "error": "rate_limited", "window": "day", "retry_at": 1234567890 } with a Retry-After header in seconds.

Skannauksia ei rajoiteta, uudelleenohjauksen nopealla polulla (aqr.net/{shortcode}) ei ole todennusta eikä skannaajuskohtaista budjettia. Jokaisella suunnitelmalla on selkeä kuukausittainen skannausraja (100 000 / 1 M / 10 M / 30 M). Ylitä raja ja uudelleenohjaus toimii silti; lähetämme sinulle sähköpostia, jotta voit päättää päivityksestä tai odottaa kertaluonteista piikkiä. Suunnitteletko yli ~10 miljoonaa päivittäistä skannausta? Lähetä meille sähköpostia kapasiteetin koordinoimiseksi.

Virheet

Jokainen virhesvastaus on JSON, jossa on koneluettava error-koodi ja tarvittaessa lisäkonteksti:

{ "error": "plan_limit", "plan": "business", "limit": 500, "current": 500 }
TilaKoodiMerkitys
400validation_errorKenttä epäonnistui validoinnissa. Vastaus sisältää field + message.
401not_signed_in / invalid_api_keyPuuttuva, virheellinen tai peruutettu bearer-token.
402plan_limitSuunnitelmasi aktiivisten+pysäytettyjen koodien katossa. Vastaus sisältää plan, limit, current.
402plan_expiredTili on ylittänyt 90 päivän lisäajan; päivitä jatkaaksesi.
403insufficient_planRajapintakäyttö vaatii Business- tai korkeamman tason. Solo-käyttäjät kohtaavat tämän.
403insufficient_roleTiimiroolisi ei salli pyydettyä muutosta (järjestelmänvalvoja+ vaaditaan).
404not_foundResurssia ei ole olemassa tai se ei ole näkyvissä laajuutessasi.
409code_not_editableKoodi on lisäaika- tai vanhentuneessa tilassa; aktivoi uudelleen muokkaamista varten.
429rate_limitedPer-plan daily budget exceeded. See Nopeusrajoitukset.
500internalKäsittelemätön palvelinvirhe, lähetä sähköpostia tukeen, jos toistettavissa.

Koodit

Dynaamiset QR-koodit: 7-merkkinen Base58-lyhytkoodi, joka uudelleenohjaa aqr.net/{shortcode}:n kautta. Jokaisessa koodissa on staattinen varakopio-QR, jonka voit ladata koontinäytöstä, jos joskus lopetat maksamisen, staattinen versio ratkaisee koskematta uudelleenohjauksemme.

GET /api/codes

Listaa kaikki koodit nykyisessä laajuudessasi (henkilökohtainen tai tiimi, jonka alaisuudessa toimit). Palauttaa taulukon, jossa 30 päivän skannauskoosteet per koodi.

$ 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

Luo uusi dynaaminen koodi. Suunnitelmasi aktiivisten+pysäytettyjen koodien katto tarkistetaan ennen lisäystä. Minimaalinen body:

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

Täydellinen mukauttaminen (kaikki valinnaisia):

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

Palauttaa 201 + luodun rivin, joka sisältää generoidun shortcode:n ja short_url:n, joka tulostetaan.

GET /api/codes/{id}

Hae yksittäinen koodi. 404, jos ei laajuudessasi.

PATCH /api/codes/{id}

Päivitä mikä tahansa muutettava kenttä. Yleisin käyttö: muuta jo tulostetun koodin kohde-URL.

$ 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

Muutokset välittyvät uudelleenohjaukseen sekunnin sisällä. Kelvolliset status-arvot PATCH:ille: "active", "paused". Poistamiseen käytä DELETE.

DELETE /api/codes/{id}

Pehmeä poisto. Siirtyy tilaan status=grace, jossa grace_until = nyt + 90 päivää. Uudelleenohjaus toimii edelleen koko lisäajan, tämä on hinnoittelulupauksen konkreettinen toteutus. 90 päivän jälkeen koodi siirtyy tilaan expired ja uudelleenohjaus palauttaa 410 Gone.

POST /api/codes/import

Joukoluonti taulukko-hyötykuormasta (käytetään myös "Tallenna Pro:hon" -virtauksessa osoitteessa qr.abundera.ai). Hyväksyy yksittäisen koodin hyötykuorman tai taulukon. Suunnitelman raja tarkistetaan kerran ennen erää.

Analytiikka

GET /api/codes/{id}/analytics

Kyselyparametrit:

  • range=7d|30d|90d|1y|3y, rajattu suunnitelmasi säilytykseen (Solo 1v, Business 2v, Team/Agency 3v).
  • granularity=day|hour, tuntikohtainen on vain Team ja Agency; max 7 päivän ikkuna tuntikohtaiselle.
{
  "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 Tietosuojamalli).

API-avaimet

Luo ja peruuta avaimia /account/keys -koontinäyttösivulta. Ohjelmallinen itsehallinta on vain luku -tilassa rajapinnan kautta, voit listata avaimesi ja peruuttaa ne, mutta uuden avaimen luominen vaatii koontinäytön (muna-kana-ongelma: tarvitsisit avaimen luodaksesi avaimen).

GET /api/keys

Listaa API-avaimesi. Ei koskaan palauta raakaa tokenia, vain metadataa.

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

DELETE /api/keys/{id}

Peruuta. Avain lakkaa toimimasta heti; mikä tahansa sitä kantava pyyntö palauttaa sen jälkeen 401 invalid_api_key.

Datan vienti

GET /api/user/export

Lataa ZIP, joka sisältää täyden tietojoukkojen, codes.csv (jokainen koodi, mukaan lukien lisäaika + vanhentunut), scans.csv (koottu päivittäinen koosteys) ja README.txt, joka selittää muodon. Arkisto lähetetään muodossa application/zip; putkita se tiedostoon:

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

Tuo uudelleen minne tahansa. Tämä on siirrettävyysmuodon takuu, toimittajaan lukittuminen ei ole mahdollista, jos omistat datasi.

Tietosuojamalli

Skannauskoosteys on koko tietosuojatarina. Mitä tallennamme per skannaus uudelleenohjauksen nopealla polulla:

  • code_id, mikä koodeistasi skannattiin
  • day_bucket, UTC-päivämäärä (YYYY-MM-DD). Ei alle päivän tarkkuutta palautetussa koosteessa.
  • country, ISO-3166-1 alpha-2 Cloudflaren CF-IPCountry-otsakkeesta. Ei kaupunkia, ei aluetta, ei geo-IP-hakua.
  • device_type, mobile / tablet / desktop / unknown, luokiteltu lyhyestä User-Agent-regexistä. Raaka UA-merkkijono hylätään luokitteluhetkellä.
  • scan_count, koosteyhteenlaskuri, upserted jokaisella osumalla.

Mitä emme tallenna: IP-osoitteita (tiivistettyinä tai muuten), raa'ita User-Agent-merkkijonoja, kaupunkitason geotietoja, alle päivän aikaleimoja, referer-tietoja, evästeitä, uudelleenkohdennuspikseleitä tai mitään yksilöivää vektoria. Melukerroin 5 estää pienien koosteiden uudelleentunnistamisen.

Team- ja Agency-tasot kirjoittavat lisäksi rinnakkaisen tuntikoosteen hour_bucket:lla (YYYY-MM-DD-HH UTC). Sama tietosuojamalli, ei alle tunnin aikaleimoja, sama melukerroin, sama yksilöiden skannaustietojen puuttuminen.

Lue koko tarina: /manifesto/ ja /no-lock-in/ ilmaistyökalun sivustolla.