Integrationsrecept
Fyra mönster täcker nästan varje integration vi ser. Vart och ett är en handfull anrop, och de går att kombinera.
Styra om en tryckt kod
Skälet till att de flesta team över huvud taget tar till API:t. En kod på en förpackning, ett klistermärke eller en affisch fortsätter fungera medan kampanjen bakom den flyttar.
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" }'På en publicerad kod slår det igenom direkt — det finns inget steg för ompublicering — och svaret säger om koden är live eller fortfarande ett utkast.
Fästa en QR på en CRM-post
Skapa koden med postens egen URL, publicera den och dra sedan in bilden rakt i ett filfält. Bild-endpointen returnerar byten inline, så de flesta CRM tar emot dem som bilaga utan mellanliggande uppladdning.
const headers = { Authorization: `Bearer ${process.env.MOSAQO_KEY}` };
const created = await fetch('https://api.mosaqo.app/v1/public-api/qr', {
method: 'POST',
headers: { ...headers, 'Content-Type': 'application/json' },
body: JSON.stringify({
name: `Deal ${deal.id}`,
mode: 'dynamic',
contentType: 'url',
content: { targetUrl: `https://crm.example.com/deals/${deal.id}` },
}),
}).then((r) => r.json());
const qrId = created.data.id;
await fetch(`https://api.mosaqo.app/v1/public-api/qr/${qrId}/publish`, { method: 'POST', headers });
const png = await fetch(
`https://api.mosaqo.app/v1/public-api/qr/${qrId}/image?format=png&size=1024`,
{ headers },
).then((r) => r.arrayBuffer());Spara qrId på din post. Det är handtaget till allt senare — omstyrning, arkivering, analys.
Utfärda koder i mängd
En kod per produkt, per bord, per utrustning. Skicka en CSV, fråga efter jobbet och koppla sedan resultaten till dina egna rader — varje rad bär det qrId den gav upphov till.
curl -X POST https://api.mosaqo.app/v1/public-api/bulk \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-d '{
"contentType": "url",
"mode": "dynamic",
"csv": "name,destination\nTable 1,https://example.com/menu?t=1\nTable 2,https://example.com/menu?t=2"
}'
curl "https://api.mosaqo.app/v1/public-api/bulk/$JOB_ID?limit=500" \
-H "Authorization: Bearer $MOSAQO_KEY"Skicka först "dryRun": true för att validera varje rad utan att skriva något.
Bädda in bilden via URL
Airtable, Notion och Sheets visar en bild från en länk de hämtar själva, så de skickar aldrig din Authorization-header och kan inte använda endpointen ovan. Be om en signerad länk i stället:
curl -X POST https://api.mosaqo.app/v1/public-api/qr/$QR_ID/image-url \
-H "Authorization: Bearer $MOSAQO_KEY" \
-H "Content-Type: application/json" \
-d '{ "format": "png", "size": 1024 }'Bara publicerade koder kvalificerar — en publicerad kod är redan tryckt och ute i världen, medan ett utkast kan vara en oannonserad kampanj. Lägg den returnerade url rakt i ett bilage- eller bildfält. Att arkivera eller radera koden stoppar länken direkt: så återkallar du en som spridit sig längre än du tänkt.
Reagera på skanningar
Skanningar skickas aldrig ut: det finns ingen webhook per skanning, och vi skickar inte analys på skanningsnivå till tredjeparts-endpoints. Prenumerera på scan.aggregate_ready om en aggregering räcker, eller hämta enskilda skanningar själv enligt schema:
curl "https://api.mosaqo.app/v1/public-api/scans?since=$LAST_SEEN&limit=500" \
-H "Authorization: Bearer $MOSAQO_KEY"Behåll den returnerade pagination.nextCursor och skicka tillbaka den nästa gång. Ordningen är stabil, så en pollare läser aldrig om och hoppar aldrig över en skanning. Vilka fält som dyker upp beror på arbetsytans integritetsinställningar för analys — svaret listar allowedDimensions så att du vet vad du kan vänta dig.
Fungerar pollning verkligen inte för dig och du behöver skanningar i samma stund som de sker, går det att ordna på begäran, inte som standard.
No-code-plattformar
Make, Zapier, n8n och Pipedream kan redan i dag prata med Mosaqo via en generisk HTTP-modul, och delarna de behöver finns på plats: GET /me som anslutningstest, markörpaginering för iteratorer, och webhook-prenumerationer som en trigger skapar och tar bort själv.
| Vad de frågar efter | Vad du anger |
|---|---|
| Bas-URL | https://api.mosaqo.app/v1/public-api |
| Auth-header | Authorization: Bearer <din nyckel> |
| Anslutningstest | GET /me |
| OpenAPI-import | https://api.mosaqo.app/v1/public-api/openapi.json |
| Direkt trigger | POST /webhooks när den slås på, DELETE /webhooks/{id} när den slås av |
| Pollande trigger | GET /qr?updatedSince=…&cursor=… |
Samma OpenAPI-dokument importeras i Postman och Insomnia, och genererar en typad klient med openapi-typescript eller vilken OpenAPI-generator som helst.
Två regler värda att följa
- Spara `qrId`, inte den publika URL:en. URL:en är stabil, men det är id:t varje senare anrop behöver.
- Arkivera hellre än radera. Radering är permanent och förstör varje tryckt exemplar; arkivering tar en kod ur drift och går att ångra.
Alla detaljer om endpoints finns i API-referensen.