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.pngMå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_xxxEn 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.
| Scope | Giver ret til |
|---|---|
qr:read | At liste og læse QR-koder, mapper og skabeloner |
qr:write | At oprette, ændre, omdirigere, udgive, arkivere og slette |
exports:read | At hente renderede kort |
analytics:read | Samlet analyse og enkelte scanninger |
bulk:write | At oprette og læse masseopgaver |
webhooks:write | At 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"
}| Status | Koder | Hvad du gør |
|---|---|---|
| 401 | invalid_api_key | Nøglen mangler, er tilbagekaldt eller udløbet. Bed brugeren om at forbinde igen. |
| 403 | insufficient_scope, ip_not_allowed, workspace_mismatch, quota_exceeded | Nøglen er gyldig, men har ikke lov til dette. At forbinde igen hjælper ikke. |
| 404 | not_found | Ingen sådan post i dette arbejdsområde. |
| 409 | idempotency_conflict, idempotency_in_progress | En nøgle genbrugt med andre data, eller første forsøg kører stadig. |
| 422 | validation_failed, invalid_cursor, approval_required, contrast_check_failed | Ret inputtet. Prøv aldrig igen uændret. |
| 429 | rate_limited | Vent 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: 1785942718Græ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.