Gå til indhold

Mosaqo API for udviklere

Et REST-API oven på det samme arbejdsområde, du bruger i appen. Alt herunder virker med én API-nøgle og en vilkårlig HTTP-klient.

Hvad du kan gøre

  • Oprette QR-koder ud fra dine egne poster — én ad gangen eller ti tusind fra en CSV.
  • Ændre hvor en trykt kode peger hen, med ét kald og uden at trykke noget om.
  • Hente det færdige kort som PNG, SVG eller PDF og hæfte det på en CRM-post.
  • Læse scanninger og samlet analyse, filtreret af arbejdsområdets privatlivsregler.
  • Modtage signerede webhooks, når koder oprettes, udgives, ændres eller arkiveres.

Hurtig start

Opret en nøgle under Bulk & API i dit arbejdsområde, sæt flueben ved scopene qr:write og qr:read, og kopiér hemmeligheden — den vises kun én gang.

Tjek nøglen, og find ud af hvilket arbejdsområde den åbner:

curl https://api.mosaqo.app/v1/public-api/me \
  -H "Authorization: Bearer $MOSAQO_KEY"

Opret en dynamisk QR-kode:

curl -X POST https://api.mosaqo.app/v1/public-api/qr \
  -H "Authorization: Bearer $MOSAQO_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Autumn campaign",
    "mode": "dynamic",
    "contentType": "url",
    "content": { "targetUrl": "https://example.com/autumn" }
  }'

Udgiv den — det er dét, der får omdirigeringen til at virke — og hent så billedet, du kan trykke:

curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/publish \
  -H "Authorization: Bearer $MOSAQO_KEY"

curl https://api.mosaqo.app/v1/public-api/qr/$QR_ID/image?format=png&size=2048 \
  -H "Authorization: Bearer $MOSAQO_KEY" -o campaign.png

Måneder senere, når kampagnen flytter, omdirigerer du den samme trykte kode uden at trykke den om:

curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/destination \
  -H "Authorization: Bearer $MOSAQO_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/winter" }'

Godkendelse

Send din hemmelighed på den ene eller den anden måde. Begge gælder hele v1 igennem.

Authorization: Bearer mosaqo_xxx
X-Mosaqo-API-Key: mosaqo_xxx

En nøgle hører til præcis ét arbejdsområde, så stier behøver ikke dets id: /v1/public-api/qr er nok. Den ældre form /v1/public-api/workspaces/{workspaceId}/qr virker stadig.

ScopeGiver ret til
qr:readAt liste og læse QR-koder, mapper og skabeloner
qr:writeAt oprette, ændre, omdirigere, udgive, arkivere og slette
exports:readAt hente renderede kort
analytics:readSamlet analyse og enkelte scanninger
bulk:writeAt oprette og læse masseopgaver
webhooks:writeAt administrere webhook-abonnementer

Nøgler kan tilbagekaldes, få en udløbsdato og begrænses til en IP-tilladelsesliste. Er det listen, der afviser nøglen, siger vi det udtrykkeligt i stedet for at lade den se ugyldig ud.

Paginering

Lister bruger keyset-paginering. Send pagination.nextCursor uændret tilbage: rækker gentages aldrig og forsvinder aldrig, fordi noget blev redigeret midt i synkroniseringen — hvilket betyder noget ved en natlig kørsel.

curl "https://api.mosaqo.app/v1/public-api/qr?limit=50&cursor=$CURSOR" \
  -H "Authorization: Bearer $MOSAQO_KEY"

Vil du spørge efter ændringer i stedet for at gennemgå alt, så tilføj updatedSince=2026-08-05T00:00:00Z.

Fejl

Hver fejl bærer en stabil code at forgrene på, en læsbar message og et requestId, der er værd at nævne over for supporten.

{
  "error": "This API key does not have the qr:write scope.",
  "message": "This API key does not have the qr:write scope.",
  "code": "insufficient_scope",
  "details": { "required": "qr:write", "granted": ["qr:read"] },
  "requestId": "req-42"
}
StatusKoderHvad du gør
401invalid_api_keyNøglen mangler, er tilbagekaldt eller udløbet. Bed brugeren om at forbinde igen.
403insufficient_scope, ip_not_allowed, workspace_mismatch, quota_exceededNøglen er gyldig, men har ikke lov til dette. At forbinde igen hjælper ikke.
404not_foundIngen sådan post i dette arbejdsområde.
409idempotency_conflict, idempotency_in_progressEn nøgle genbrugt med andre data, eller første forsøg kører stadig.
422validation_failed, invalid_cursor, approval_required, contrast_check_failedRet inputtet. Prøv aldrig igen uændret.
429rate_limitedVent det antal sekunder, Retry-After angiver.

Kaldgrænser

Hvert svar bærer dit aktuelle budget, ikke kun dem der afvises:

X-RateLimit-Limit: 600
X-RateLimit-Remaining: 574
X-RateLimit-Reset: 1785942718

Grænsen er et værn mod misbrug, ikke et abonnement: den betyder hverken kvote, fakturering eller opgradering.

Idempotens

Idempotency-Key er valgfri. Send en — en hvilken som helst unik streng — og et identisk gentaget kald inden for 24 timer afspiller det oprindelige svar i stedet for at handle to gange. Samme nøgle med andre data giver 409. Uden nøgle kører kaldet bare, uden beskyttelse mod gentagelse.

Videre

  • Webhooks — hændelseskataloget og hvordan du verificerer en levering.
  • Opskrifter — mønstre til Make, Zapier, n8n og CRM.
  • API-reference — hvert endpoint, med live konsol.