plingitLogga in

Dokumentation

Från noll till levererat SMS

Plingit är en svensk enkelriktad SMS-gateway. Bas-URL för API:t är https://plingit.se/v1. Endast svenska mobilnummer.

Kom igång — välj din väg

Två vägar till samma kärna. Bygger du med en AI-agent? Lägg till MCP:n och slipp koda anrop. Klassisk integration? REST:et är ett litet HTTP-API.

Gratis-nivån oavsett väg: 10 SMS till ditt eget verifierade nummer. Sen 50 öre/segment.

Väg A · MCP — ge din agent händer

Differentiatorn: en modern MCP-server (npm: plingit-mcp) som ger din agent händer. Inga API-anrop att koda — agenten anropar verktyg direkt, och nyckeln persisteras lokalt efter första verify (hanteras aldrig per anrop). Tre sätt att lägga till den, enklast först:

1 · Be din agent (talspråk)

Enklast av allt — skriv till Claude Code eller Codex i klartext, så sköter agenten installationen åt dig:

Klistra in i din agent

”Installera MCP-servern plingit-mcp och messa mig när nattbygget är klart. Verifiera mitt nummer 0701234567 först om det behövs.”

Agenten kör claude mcp add plingit -- npx plingit-mcp, ber dig starta om Claude Code (MCP-verktyg laddas vid start), och sköter sedan verifiering och sändning själv.

2 · Plugin (ingen omstart)

Som Claude Code-plugin aktiveras verktygen direkt med /reload-plugins — ingen omstart behövs:

/plugin marketplace add goodsys2/plingit-plugin
/plugin install plingit-mcp@plingit
/reload-plugins

3 · Manuellt / andra klienter

Claude Code — ett kommando (starta om efteråt):

claude mcp add --scope user plingit -- npx plingit-mcp

--scope user gör den tillgänglig i alla dina projekt. Verktygen syns efter omstart av Claude Code.

Codex — i ~/.codex/config.toml:

[mcp_servers.plingit]
command = "npx"
args = ["plingit-mcp"]

Andra MCP-klienter (Cursor, Windsurf m.fl.) — JSON:

{
  "mcpServers": {
    "plingit": { "command": "npx", "args": ["plingit-mcp"] }
  }
}

Verktyg: register, verify, notify, send_sms, get_balance, top_up, message_status.

Väg B · REST på tre steg

Har du redan en nyckel?

Hämta en under Inställningar i webb-GUI:t (eller återanvänd en från en tidigare verifiering), lägg den i miljövariabeln PLINGIT_KEY och hoppa direkt till sändningen längre ner. Verify-stegen behövs bara för att skaffa den allra första nyckeln — och steg 1 skickar en kod via SMS som en människa måste läsa, så en agent kan inte köra dem åt dig. Bygger du en integration: skaffa nyckeln en gång, lägg den bland dina secrets och låt koden läsa PLINGIT_KEY.

Tre steg från noll till levererat SMS till ditt eget nummer:

# 1. Begär en kod (du får ett SMS)
curl -X POST https://plingit.se/v1/verify/start \
  -H 'content-type: application/json' \
  -d '{"number":"0701234567"}'

# 2. Bekräfta koden → du får en API-nyckel (visas EN gång)
curl -X POST https://plingit.se/v1/verify/confirm \
  -H 'content-type: application/json' \
  -d '{"number":"0701234567","code":"482913"}'
# → { "api_key": "sk_live_…", "scope": "free", "free_sends_remaining": 10 }

# 3. Messa dig själv
curl -X POST https://plingit.se/v1/notify \
  -H 'authorization: Bearer sk_live_…' \
  -H 'content-type: application/json' \
  -d '{"text":"Hej från Plingit!"}'

POST /v1/messages tar ett nummer eller en lista och svarar alltid synkront för ett nummer (200) med id och status:

curl -X POST https://plingit.se/v1/messages \
  -H 'authorization: Bearer sk_live_…' \
  -H 'content-type: application/json' \
  -d '{"to":"+46701234567","text":"Din order är skickad","from":"BUTIKEN"}'

Svaret (200):

{
  "id": "9b2c1f0a-…",
  "to_e164": "+46701234567",
  "sender": "BUTIKEN",
  "status": "sent",
  "segments": 1,
  "cost_ore": 50,
  "balance_ore": 9950,
  "scope": "paid"
}

Flera nummer (broadcast) → 202 accepted med en lista av ids (köas och pacas). Skicka Idempotency-Key så dubbelskickar en retry aldrig. Saknas saldo returneras status: needs_credit + en payment_url — som HTTP 200, inte ett fel.

Få ett larm när X händer

Det vanligaste agent-fallet: pinga din människa när något händer. /v1/notify är helt enkelt /v1/messages till dig själv — destinationen är alltid ditt eget verifierade nummer, så du behöver ingen to. Det är också det som ryms i gratis-nivån.

# t.ex. i ett cron-jobb eller en CI-pipeline
if ! ./build.sh; then
  curl -s -X POST https://plingit.se/v1/notify \
    -H "authorization: Bearer $PLINGIT_KEY" \
    -H 'content-type: application/json' \
    -d '{"text":"⚠️ Bygget föll på main"}'
fi

Kodexempel — skicka ett SMS i ditt språk

Samma anrop som ovan (POST /v1/messages), i de vanligaste språken. Byt sk_live_… mot din nyckel. (Bygger du med en agent? Hoppa det här — använd MCP:n ovan.)

curl -X POST https://plingit.se/v1/messages \
  -H 'authorization: Bearer sk_live_…' \
  -H 'content-type: application/json' \
  -d '{"to":"+46701234567","text":"Din order är skickad"}'

Autentisering & API-nycklar

Alla skarpa endpoints kräver Authorization: Bearer <nyckel>. Nyckeln har formatet sk_live_… (skarp). Behöver du testa utan att skicka något? Skapa en sk_test_…-nyckel under Inställningar i webb-GUI:t — den mockar all sändning (inget skickas, inget kostar, oändligt) och fungerar parallellt med din skarpa nyckel.

Prova gratis först

Verifiera ditt eget nummer och skicka direkt med /notify — de första 10 SMS:en till dig själv är gratis. Ingen betalning krävs för att komma igång.

Nyckeln visas en gång vid verifiering och lagras hashad hos oss. Tappar du den — verifiera om numret för en färsk nyckel (den gamla återkallas).

Avsändare & teckenkodning

from är en alfanumerisk avsändare, max 11 tecken (a–z, 0–9). Default är PLINGIT. Custom avsändare kräver betalt konto.

Bara GSM-7-tecken → 160 tecken/segment (153 i multipart). Innehåller texten åäö eller emoji → UCS-2, 70 tecken/segment. Gratis-SMS kapas till 1 segment.

Felkoder

Felsvar är strukturerade och självkorrigerbara:

{ "error": { "code": "needs_credit", "message": "…",
            "hint": "…", "payment_url": "https://…" } }
  • invalid_to · invalid_from · text_empty · text_too_long
  • not_verified · invalid_code · code_expired
  • scope_forbidden · rate_limited · unauthorized
  • needs_credit — returneras som HTTP 200 (mjukt stopp), inte ett undantag att fånga

API-referens

Maskinläsbart, för dig och din agent: