Qrona Newsletter API · version 1
API för utvecklare
Koppla er webbutik, ert CRM eller egna system till Qrona Newsletter. Med API:t läser och uppdaterar ni kontakter, anmäler personer till listor med beviset för deras samtycke, skickar in butikens köp och håller andra system i takt med avregistreringar.
Kom igång
- Skapa en nyckel. En administratör i arbetsytan går till Inställningar → API-nycklar, ger nyckeln ett namn och väljer vad den får göra. Nyckeln visas en gång – spara den där den ska användas, till exempel i
wp-config.php. - Gör första anropet. Det berättar vilken arbetsyta nyckeln gäller och vad den får göra.
curl https://newsletter.qrona.se/api/v1 \
-H "Authorization: Bearer $QRONA_NEWSLETTER_KEY"- Skapa eller uppdatera en kontakt med POST /contacts/upsert, och anmäl till en lista med POST /lists/{id}/members.
curl -X POST https://newsletter.qrona.se/api/v1/contacts/upsert \
-H "Authorization: Bearer $QRONA_NEWSLETTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "anna@example.se",
"first_name": "Anna",
"add_tags": ["kund"],
"consent_source": "Kryssade i rutan i kassan på butik.se"
}'Nycklar och behörigheter
Skicka nyckeln i varje anrop: Authorization: Bearer qn_live_…. Nycklar hör hemma på en server, aldrig i en webbläsare eller app – API:t svarar inte på anrop från andra webbplatser (ingen CORS). Har en nyckel kommit ut: återkalla den under API-nycklar, så slutar den fungera direkt.
En nyckel gäller en arbetsyta och agerar som personen som skapade den. Den gör aldrig mer än personen själv får göra just nu: lämnar personen arbetsytan slutar nyckeln gälla, och har personen kontaktvillkor ser nyckeln bara de kontakterna. Allt som görs med en nyckel syns i arbetsytans revisionslogg, märkt med nyckelns namn.
| Behörighet | Ger | Personens roll |
|---|---|---|
contacts:read | Kontakter, deras listor och spärrlistan. | alla |
contacts:write | Lägga till och ändra kontakter, taggar och listmedlemskap, avregistrera. | redaktör+ |
contacts:erase | Radera en kontakts personuppgifter för gott. Adressen spärras. | redaktör+ |
lists:read | Listor och deras medlemmar. | alla |
lists:write | Skapa, ändra och ta bort listor. | redaktör+ |
fields:read | Vilka egna fält kontakterna har. | alla |
segments:read | Distributionslistor (segment) med antal. Kräver att personen är administratör. | administratör |
ecommerce:read | Butiker, kunder, produkter, ordrar, kundkorgar och intäkt per kampanj. | alla |
ecommerce:write | Skicka in och ta bort butiker, kunder, produkter, ordrar och kundkorgar. | redaktör+ |
webhooks:read | Arbetsytans webhooks och deras leveranser. Kräver att personen är administratör. | administratör |
webhooks:write | Skapa, ändra, testa och ta bort webhooks. Kräver att personen är administratör. | administratör |
messages:send · templates:render har bara Qronas systemnyckel för tillägget Byråstöd: Klientkommunikation, som hör till organisationen och inte till en person. Läs mer i Meddelanden från Qrona.
Format
- Bas-adress:
https://newsletter.qrona.se/api/v1. Allt är JSON i UTF-8; skicka kroppar medContent-Type: application/json. - Fältnamn är
snake_case, id:n är strängar och tider är ISO 8601 i UTC (2026-10-19T08:30:00.000Z). - Ändringar (PATCH, upsert och e-handelns PUT) rör bara de fält du skickar – listor som orderrader och varianter ersätts när de skickas.
nulltömmer ett fält. Okända fält i en kropp ger 422, så att stavfel märks. - E-postadresser skickas i kroppen, inte i adressraden, så att de inte hamnar i loggar – därför finns POST /contacts/lookup.
Sidor (paginering)
Listor kommer en sida i taget: limit säger hur många, och svaret har data, has_more och next_cursor. Hämta nästa sida med cursor=next_cursor tills has_more är false. Sidorna är stabila även medan kontakter läggs till. För löpande synk: spara tiden innan du börjar och hämta sedan bara det som ändrats med updated_since.
let cursor = null;
do {
const url = new URL('https://newsletter.qrona.se/api/v1/contacts');
url.searchParams.set('limit', '500');
if (cursor) url.searchParams.set('cursor', cursor);
const page = await fetch(url, { headers: { Authorization: `Bearer ${key}` } }).then((r) => r.json());
for (const contact of page.data) await save(contact);
cursor = page.next_cursor;
} while (cursor);Fel
Fel svarar med en HTTP-status och application/problem+json: code är till för program, title och detail för människor, och errors säger vad som är fel per fält. Alla koder finns under Felkoder.
Begränsningar
- Högst 600 anrop per minut och nyckel. Varje svar har
X-RateLimit-Limit,X-RateLimit-RemainingochX-RateLimit-Reset(sekunder); över gränsen blir svaret 429 medRetry-After. - Kroppar högst 64 kB (produkter, ordrar och korgar 256 kB, batch 5 MB). Upp till 500 per sida och 100 adresser per uppslag.
- Upprepa ett anrop som fick 429 eller 5xx efter en stund – helst med växande väntetid. Upsert, PUT och anmälningar kan göras om utan att något dubbleras; för andra POST-anrop, skicka Idempotency-Key.
Samtycke och GDPR
Ni är personuppgiftsansvariga för era kontakter, och Qrona Newsletter sparar beviset för varje samtycke. Därför:
- Skapa bara kontakter som har samtyckt till utskick, eller där ni har en annan rättslig grund.
consent_sourcebeskriver hur – med egna ord, till exempel ”Kryssade i rutan i kassan på butik.se”. - Vid anmälan till en lista skickar ni texten personen godkände, var det hände och personens IP-adress. På listor med dubbel opt-in får personen ett bekräftelsemejl.
- Den som har avregistrerat sig kommer aldrig tillbaka utan att själv bekräfta via e-post, och spärrade adresser – studs, skräppostanmälningar, raderade – går inte att anmäla alls.
- Avregistreringar: låt en webhook berätta när de händer, eller hämta spärrlistan regelbundet. Avregistrera med POST /contacts/{id}/unsubscribe när kunden säger nej i er butik.
- Radering: när en kund begär att bli raderad, anropa POST /contacts/{id}/erase (kräver behörigheten
contacts:erase). Känsliga fält, som personnummer, går varken att läsa eller skriva via API:t. - E-handel: butikens kunder blir aldrig kontakter, vare sig de har samtyckt eller inte. De som har samtyckt anmäler ni till en lista som vanligt. Läs mer i guiden om e-handel.
Exempel: webbutik
Så här kan en WooCommerce-butik lägga till kunder som kryssar i en ruta för nyhetsbrev i kassan. Nyckeln och listans id ligger i wp-config.php. Kör anropen i bakgrunden (till exempel med Action Scheduler) så att kassan aldrig väntar på oss. Ordrarna själva – för köpvillkor och intäkt per kampanj – skickas som i guiden om e-handel.
<?php
// När en order läggs i WooCommerce och kunden har kryssat i rutan för nyhetsbrev.
add_action('woocommerce_checkout_order_processed', function ($order_id) {
$order = wc_get_order($order_id);
if ($order->get_meta('_newsletter_optin') !== 'yes') {
return; // Inget samtycke: kunden läggs inte till.
}
$request = fn ($method, $path, $body) => wp_remote_request('https://newsletter.qrona.se/api/v1' . $path, [
'method' => $method,
'timeout' => 15,
'headers' => [
'Authorization' => 'Bearer ' . QRONA_NEWSLETTER_KEY,
'Content-Type' => 'application/json',
],
'body' => wp_json_encode($body),
]);
// 1. Anmälan till listan, med beviset för samtycket.
$request('POST', '/lists/' . QRONA_NEWSLETTER_LIST . '/members', [
'email' => $order->get_billing_email(),
'first_name' => $order->get_billing_first_name(),
'last_name' => $order->get_billing_last_name(),
'consent' => [
'text' => 'Ja, jag vill få nyhetsbrev från Exempel AB.',
'source' => 'Kassan på ' . wp_parse_url(home_url(), PHP_URL_HOST),
'ip' => $order->get_customer_ip_address(),
'user_agent' => $order->get_customer_user_agent(),
],
]);
// 2. Egna fält och taggar på kontakten.
$request('POST', '/contacts/upsert', [
'email' => $order->get_billing_email(),
'fields' => ['kundnummer' => (string) $order->get_customer_id()],
'add_tags' => ['kund'],
]);
});Versioner
Det här är version 1. Vi lägger till nya fält, anrop och felkoder utan förvarning – låt programmet strunta i fält det inte känner igen. Ändringar som kan få befintliga integrationer att sluta fungera kommer bara i en ny version, med god framförhållning.
- 2026-10-19
- Version 1: nycklar, kontakter, listor och anmälningar, kontaktfält, distributionslistor och spärrlistan.
- 2026-10-19
- E-handel (butiker, kunder, produkter, ordrar, kundkorgar, intäkt per kampanj), POST /batch, Idempotency-Key och webhooks.
Frågor? Skriv till support@qrona.se.