Abundera QR Pro/ Documentation

Abundera QR Pro API

REST API-referanse for pro.qr.abundera.ai. Opprett, rediger og analyser dynamiske QR-koder programmatisk. Alt er JSON over HTTPS, autentisert via bearer-token.

Sist oppdatert: 2026-04-18 · support@abundera.ai · OpenAPI 3.1-spesifikasjon (JSON) · Offisielle SDK-er (TS / Python / Go)

Maskinlesbar spesifikasjon:/docs/openapi.json, importer til Postman, Insomnia eller en hvilken som helst OpenAPI 3.1-klient. Dekker 36 kundevendte endepunkter for Codes, Analytics, Groups, Teams, Webhooks og User. Admin- og Stripe-webhook-endepunkter er bevisst utelatt (kun tjeneste-til-tjeneste).

Introduksjon

Abundera QR Pro API lar deg opprette, redigere og analysere dynamiske QR-koder programmatisk, alt en utvikler ønsker å automatisere fra dashbordet. Teamadministrasjon, fakturering og kontoadministrasjon skjer i dashbordgrensesnittet; dette API-et er begrenset til kodeoperasjoner på utviklernivå.

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

Forespørselsformat: JSON (Content-Type: application/json) på POST / PATCH / DELETE.

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

Tilgjengelighet: API-tilgang er en Business+-funksjon. Solo-planer kan bruke dashbordet, men ikke API-et.

Autentisering

Hver forespørsel bærer en API-nøkkel som bearer-token:

Authorization: Bearer abnd_qrpro_...

Opprett og tilbakekall nøkler på /account/keys (Business-, Team- eller Agency-nivå). Den rå abnd_qrpro_...-tokenen vises nøyaktig én gang ved opprettelse, lagre den umiddelbart. Vi lagrer kun SHA-256-hashen; det er ingen måte å gjenopprette en tapt nøkkel.

Uautentiserte forespørsler returnerer 401 { "error": "not_signed_in" }. Ugyldige eller tilbakekalte nøkler returnerer 401 { "error": "invalid_api_key" }.

API-nøkler er begrenset til brukeren som opprettet dem. Hvis den brukeren er medlem av et team, opererer endepunktene nedenfor automatisk på teamets koder (gjeldende teamkontekst lagres på brukerkontoen og administreres via dashbordet).

Hastighetsbegrensninger

Håndheves per API-nøkkel. Hvert svar inneholder X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset (unix-sekunder når vinduet rulleres over).

PlanGrenseVindu
Business1 000 forespørsler / dagUTC-dag
Team10 000 forespørsler / dagUTC-dag
Agency50 000 forespørsler / dagUTC-dag
Solo(403 insufficient_plan),

Forespørsler over budsjett returnerer 429 { "error": "rate_limited", "window": "day", "retry_at": 1234567890 } med en Retry-After-header i sekunder.

Skanninger har ingen hastighetsbegrensning, omdirigeringens hurtigvei (aqr.net/{shortcode}) krever ingen autentisering og har ingen per-skanne-budsjett. Hver plan har et eksplisitt månedlig skannegrense (100k / 1M / 10M / 30M). Overskrid grensen og omdirigeringen fortsetter å fungere; vi sender deg en e-post slik at du kan avgjøre om du vil oppgradere eller vente ut en engangstipp. Planlegger du over ~10M daglige skanninger? Send oss en e-post for å koordinere kapasitet.

Feil

Hvert feilsvar er JSON med en maskinlesbar error-kode og, der relevant, tilleggskontekst:

{ "error": "plan_limit", "plan": "business", "limit": 500, "current": 500 }
StatusKodeBetydning
400validation_errorBrødtekstfelt mislyktes i validering. Svaret inkluderer field + message.
401not_signed_in / invalid_api_keyManglende, ugyldig eller tilbakekalt bearer-token.
402plan_limitVed planens aktive+pausede kodegrense. Svaret inkluderer plan, limit, current.
402plan_expiredKontoen er forbi 90-dagers avviklingsvinduet; oppgrader for å gjenoppta.
403insufficient_planAPI-tilgang krever Business eller høyere. Solo-brukere treffer dette.
403insufficient_roleTeamrollen din tillater ikke den forespurte endringen (admin+ kreves).
404not_foundRessursen finnes ikke, eller er ikke synlig i ditt omfang.
409code_not_editableKoden har avviklings- eller utløpt status; reaktiver for å redigere.
429rate_limitedPlanens daglige budsjett er overskredet. Se Hastighetsbegrensninger.
500internalUhåndtert tjenerfeil, send e-post til støtte hvis reproduserbar.

Koder

Dynamiske QR-koder: en 7-tegns Base58-kortkode som omdirigerer gjennom aqr.net/{shortcode}. Hver kode har en statisk sikkerhetskopi-QR du kan laste ned fra dashbordet, hvis du slutter å betale, fungerer den statiske versjonen fortsatt uten å berøre vår omdirigering.

GET /api/codes

Vis alle koder i ditt gjeldende omfang (personlig, eller teamet du for øyeblikket handler under). Returnerer en matrise med en 30-dagers skannesammendrag per kode.

$ 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

Opprett en ny dynamisk kode. Planens aktive+pausede kodegrense kontrolleres før innsetting. Minimalt innhold:

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

Full tilpasning (alt valgfritt):

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

Returnerer 201 + den opprettede raden inkludert den genererte shortcode og short_url du skriver ut.

GET /api/codes/{id}

Hent én enkelt kode. 404 hvis ikke i ditt omfang.

PATCH /api/codes/{id}

Oppdater et hvilket som helst mutable felt. Vanligste bruk: endre mål-URL for en allerede trykt kode.

$ 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

Endringer forplanter seg til omdirigeringen i løpet av sekunder. Gyldige status-verdier for PATCH: "active", "paused". Bruk DELETE for å slette.

DELETE /api/codes/{id}

Myk sletting. Overgår til status=grace med grace_until = now + 90 days. Omdirigeringen fortsetter å fungere gjennom hele avviklingsvinduet, dette er det konkrete løftet om ingen bindingstid. Etter 90 dager blir koden expired og omdirigeringen returnerer 410 Gone.

POST /api/codes/import

Masseopprettelse fra en matrise-nyttelast (brukes også av flyten «Lagre til Pro» på qr.abundera.ai). Aksepterer én kodepakke eller en matrise. Plangrensen håndheves én gang før partiet.

Analyse

GET /api/codes/{id}/analytics

Spørringsparametere:

  • range=7d|30d|90d|1y|3y, begrenset til planens oppbevaringstid (Solo 1y, Business 2y, Team/Agency 3y).
  • granularity=day|hour, time gjelder kun Team og Agency; maks 7-dagers vindu for time.
{
  "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 }
  ]
}

Land med færre enn 5 skanninger i vinduet slås sammen til "Other" for personvern (se Personvernmodell).

API-nøkler

Opprett og tilbakekall nøkler fra /account/keys-dashbordsiden. Programmatisk selvadministrasjon er skrivebeskyttet via API-et, du kan vise nøklene dine og tilbakekalle dem, men å opprette en ny nøkkel krever dashbordet (høna og egget: du trenger en nøkkel for å opprette en nøkkel).

GET /api/keys

Vis API-nøklene dine. Returnerer aldri rå-tokenen, kun metadata.

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

DELETE /api/keys/{id}

Tilbakekall. Nøkkelen slutter å virke umiddelbart; alle forespørsler som bærer den returnerer 401 invalid_api_key deretter.

Dataeksport

GET /api/user/export

Last ned en ZIP med hele datasettet ditt, codes.csv (alle koder, inkludert avviklings- og utløpte), scans.csv (aggregert daglig sammendrag) og en README.txt som forklarer formatet. Arkivet sendes som application/zip; rør det til en fil:

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

Importer igjen hvor som helst. Dette er garantien for portabelt format, ingen leverandørbinding er mulig hvis du eier dataene dine.

Personvernmodell

Skanneaggregatet er hele personvernhistorien. Hva vi lagrer per skanning på omdirigeringens hurtigvei:

  • code_id, hvilken av kodene dine ble skannet
  • day_bucket, UTC-dato (YYYY-MM-DD). Ingen sub-dag-presisjon på aggregatet returnert til deg.
  • country, ISO-3166-1 alpha-2 fra Cloudflares CF-IPCountry-header. Ingen by, ingen region, ingen geo-IP-oppslag.
  • device_type, mobile / tablet / desktop / unknown, klassifisert fra en kort User-Agent-regex. Den rå UA-strengen forkastes ved klassifisering.
  • scan_count, aggregatteller, upsertert ved hvert treff.

Hva vi ikke lagrer: IP-adresser (hashet eller på annen måte), rå User-Agent-strenger, bygeografi, sub-dag-tidsstempler, referer, informasjonskapsler, målrettingspiksel eller noen individuelt identifiserende vektor. Et støygulv på 5 undertrykker re-identifisering av småaggregater.

Team- og Agency-nivåer skriver dessuten et parallelt timesaggregat med hour_bucket (YYYY-MM-DD-HH UTC). Samme personvernmodell, ingen finere tidsstempler enn time, samme støygulv, samme fravær av individuelle skannerdata.

Les hele historien: /manifesto/ og /no-lock-in/ på gratisverktøysiden.