Hoppa till innehåll

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 efterVad du anger
Bas-URLhttps://api.mosaqo.app/v1/public-api
Auth-headerAuthorization: Bearer <din nyckel>
AnslutningstestGET /me
OpenAPI-importhttps://api.mosaqo.app/v1/public-api/openapi.json
Direkt triggerPOST /webhooks när den slås på, DELETE /webhooks/{id} när den slås av
Pollande triggerGET /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.