Fri skiss försthej@wwwebb.se
Partners

Partner API.

Skapa förhandsvisningar åt era kunder, lista dem och se vilka som blivit betalande. REST, stabil JSON, Bearer-auth. Två endpoints, och det är hela API:et idag.

01Komma igång

Tre saker att veta först.

Nycklar delas ut för hand. Det är ett medvetet val: vi vill veta vem som bygger mot API:et medan det fortfarande är litet.

STEG 01

Hör av er

Vi skapar er partner och en nyckel för hand. Det finns ingen publik registrering och ingen självbetjäning.

STEG 02

Skicka nyckeln i varje anrop

Authorization: Bearer ER_NYCKEL. Nyckeln jämförs med konstant tidsåtgång, och den identifierar samtidigt vilken partner anropet tillhör.

STEG 03

Anropa bas-URL:en

https://wwwebb.se/api/partner. Svaren är JSON. Bakåtinkompatibla ändringar versioneras, vi ändrar inte formen på ett svar under fötterna på er.

02Endpoint

POST /api/partner/previews

Skapar en kund och en draft-sajt, och ger tillbaka en preview-URL. Sajten publiceras inte, den ligger som utkast tills kunden aktiverar.

FältTypKravVad det gör
brandNameText, 1 till 120 teckenObligatorisktFöretagsnamnet. Blir sajtens namn och ligger till grund för slug.
emailGiltig e-postadressObligatorisktKundens adress. Finns kunden redan återanvänds den i stället för att dubbleras.
phoneText, max 50 teckenValfrittHamnar i sajtens kontaktuppgifter.
addressText, max 200 teckenValfrittAnvänds för ort och kontaktuppgifter.
industryEtt av värdena nedanObligatorisktStyr mall och innehåll. Ett okänt värde ger 400.
partner_refText, max 120 teckenValfrittEr egen referens. Ekas tillbaka i svaret och i listningen.
Anrop
curl -X POST https://wwwebb.se/api/partner/previews \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "brandName": "Larssons Bygg",
    "email": "kalle@larssonsbygg.se",
    "phone": "+46701234567",
    "address": "Storgatan 1, Uppsala",
    "industry": "handyman",
    "partner_ref": "vart-interna-id-123"
  }'
Svar 200
{
  "ok": true,
  "partner": "er-handle",
  "partner_ref": "vart-interna-id-123",
  "customer": {
    "id": "0b91...",
    "email": "kalle@larssonsbygg.se"
  },
  "site": {
    "id": "7a42...",
    "slug": "larssons-bygg",
    "preview_url": "https://wwwebb.se/preview/larssons-bygg"
  }
}

Tillåtna värden för industry

  • handyman
  • cleaning
  • restaurant
  • salon
  • healthcare
  • fitness
  • realestate
  • lawfirm
  • photography
  • tech
  • agency
  • generic
03Endpoint

GET /api/partner/previews/list

Listar allt ni skapat. Varje rad säger om kunden har börjat betala via customer.paid, vilket är det ni bygger er egen konverteringsrapport på.

Anrop
curl "https://wwwebb.se/api/partner/previews/list?limit=50&offset=0" \
  -H "Authorization: Bearer $TOKEN"
Svar 200
{
  "partner": "er-handle",
  "previews": [
    {
      "site_id": "7a42...",
      "slug": "larssons-bygg",
      "status": "draft",
      "template_id": "handyman-v2",
      "custom_domain": null,
      "preview_url": "https://wwwebb.se/preview/larssons-bygg",
      "created_at": "2026-07-14T09:12:44.000Z",
      "customer": {
        "email": "kalle@larssonsbygg.se",
        "name": "Larssons Bygg",
        "paid": false
      },
      "partner_ref": "vart-interna-id-123"
    }
  ],
  "paging": { "limit": 50, "offset": 0, "returned": 1 }
}

Frågeparametrar: limit (standard 50, tak 200) och offset (standard 0). paging.returned säger hur många rader svaret faktiskt innehåller, så ni vet när ni nått slutet utan att gissa.

04Fel

Statuskoder ni behöver hantera.

Felsvaren är JSON med ett fält error, och vid schemafel dessutom issues med sökväg och beskrivning per fält.

KodBetyderVad ni gör
401Saknad, för kort eller ogiltig Bearer-tokenKontrollera nyckeln. Svaret bär WWW-Authenticate: Bearer.
400Trasig JSON, eller ett fält som inte klarar schematLäs issues i svaret, rätta fältet och skicka om. En retry utan ändring ger samma fel.
500Fel hos oss. Loggas automatiskt till SentryFörsök igen med en paus emellan. Återkommer det, hör av er så tittar vi.
429HastighetsbegränsningBygg för den även om ni inte ser den: backa av och försök igen efter en stund. Vi vill kunna strypa vid behov utan att fälla er integration.
Ett lyckat anrop mot previews ger 200 med ok: true. Listningen ger 200 även när ni inte skapat något än, då är previews en tom lista.
05Ersättning

Så räknas er andel.

Sammanfattning. Villkoren i sin helhet står på partnersidan.

Ni får en andel av det era kunder betalar, varje månad kunden är kvar. Utgångspunkten är 20 procent och andelen sätts per partner. Underlaget är aktiva abonnemang just nu, inte historik, och det finns ingen tidsgräns som klipper ersättningen efter ett år. Utbetalning sker mot faktura från er och bokförs i partnervyn, där ni också ser era kunder, er andel och vad som redan betalats ut.

06Ärligt

Det API:et inte gör.

Två endpoints är två endpoints. Behöver ni något av det nedan, säg till, då vet vi vad vi ska bygga härnäst.

  • Aktivering

    Att ta kunden hela vägen till betalning görs i vårt flöde, inte via API.

  • Webhooks

    Vi skickar inga händelser till er. Polla listningen tills vidare.

  • Bulk-import

    En kund per anrop. Vill ni lägga in många, hör av er först.

  • Domäner

    Egen domän kopplas av oss, det går inte att beställa via API.

Kom igång

Vill ni bygga mot API:et?

Berätta vad ni jobbar med och ungefär hur många sajter ni gör om året, så skapar vi en nyckel åt er.

Vi lägger upp partners för hand · svar inom 1 till 2 arbetsdagar