Texta

API & MCP

Allt du behöver för att skicka SMS från ditt system eller din AI-assistent.

Interaktiv OpenAPI

Autentisering

Skapa en API-nyckel under API & MCP i dashboarden. Skicka den som Bearer-token i varje anrop. Nycklar börjar med txa_. Max 120 anrop per minut och nyckel.

Authorization: Bearer txa_DIN_NYCKEL

Skicka SMS

POST https://texta.mer.nu/api/v1/sms

FältTypBeskrivning
tosträngMottagare. +46701234567 eller 0701234567 (svenskt nummer utan landskod får +46).
messagesträngMeddelandetext. Max 6 SMS-delar (918 tecken GSM-7 / 402 tecken UCS-2).
fromsträng, valfriAvsändare: 1–11 bokstäver/siffror (t.ex. MittBolag) eller ett nummer med landskod. Utelämnas → kontots standardavsändare.
curl -X POST https://texta.mer.nu/api/v1/sms \
  -H "Authorization: Bearer txa_DIN_NYCKEL" \
  -H "Content-Type: application/json" \
  -d '{"to": "+46701234567", "message": "Din bokning är bekräftad.", "from": "MittBolag"}'

Svar 201 Created:

{
  "id": 123,
  "to": "+46701234567",
  "from": "MittBolag",
  "message": "Din bokning är bekräftad.",
  "parts": 1,
  "status": "created",
  "price_sek": 0.69,
  "source": "api",
  "error": null,
  "created_at": "2026-09-06T20:15:03+00:00",
  "delivered_at": null
}

Felkoder: 400 ogiltigt nummer/avsändare/text, 401 saknad eller fel nyckel, 403 kontot ej aktiverat, 429 för många anrop, 502 leverantören avvisade meddelandet. Felmeddelandet finns i detail.

Lista och hämta

GET /api/v1/sms?limit=50&offset=0&status=delivered — de senaste meddelandena, nyast först. Svar: {"items": [...], "total": n, "limit": 50, "offset": 0}.

GET /api/v1/sms/{id} — ett meddelande med aktuell leveransstatus.

GET /api/v1/account — kontostatus, pris och förbrukning innevarande månad.

Status: created (mottaget av operatören), sent, delivered, failed (operatören kunde inte leverera), error (avvisat innan sändning — debiteras inte).

Kontaktlistor

Listor skapas och fylls i dashboarden (manuellt eller CSV-import). Via API:t kan du läsa dem och skicka till alla i en lista:

GET /api/v1/lists — dina listor. GET /api/v1/lists/{id} — listan med kontakter.

POST /api/v1/lists/{id}/send med {"message": "Hej {namn}!", "from": "MittBolag"} — svarar 202 med batch_id; utskicket körs i bakgrunden. {namn} byts mot kontaktens namn.

GET /api/v1/batches/{batch_id} — antal per status och kostnad. GET /api/v1/sms?batch_id=… — meddelandena i utskicket.

Schemalägga

Lägg till send_at (ISO 8601; utan tidszon tolkas det som svensk tid) i POST /api/v1/sms eller POST /api/v1/lists/{id}/send. Svaret blir 202 med jobbet i stället för ett skickat meddelande. Minst 30 sekunder och högst ett år fram.

{"to": "+46701234567", "message": "Påminnelse: möte kl 10.", "send_at": "2026-09-10T09:00"}

GET /api/v1/scheduled — dina jobb, väntande först. GET /api/v1/scheduled/{id} — ett jobb med status (scheduled, sending, done, cancelled, error). DELETE /api/v1/scheduled/{id} — avboka ett jobb som inte börjat (409 annars).

Priset bestäms när utskicket faktiskt går. Ett listutskick använder listans innehåll vid sändningstillfället.

Python-exempel

import httpx

TEXTA = "https://texta.mer.nu"
KEY = "txa_DIN_NYCKEL"

r = httpx.post(f"{TEXTA}/api/v1/sms",
               headers={"Authorization": f"Bearer {KEY}"},
               json={"to": "0701234567", "message": "Hej!"})
r.raise_for_status()
print(r.json()["id"], r.json()["status"])

MCP — för AI-assistenter

Texta exponerar en MCP-server (Model Context Protocol, Streamable HTTP) på https://texta.mer.nu/mcp. Samma API-nyckel används som Bearer-token. Assistenten får tio verktyg:

VerktygGör
send_smsSkickar ett SMS (to, message, valfritt from). Kostar pengar.
estimate_smsRäknar delar och pris för en text utan att skicka.
list_smsSenaste meddelandena med status.
get_smsEtt meddelande med leveransstatus.
get_accountPris, status och förbrukning.
list_contact_listsKontaktlistor, med kontakter om man ber om det.
send_sms_to_listSamma SMS till alla i en lista, {namn} personaliseras. Kostar pengar per mottagare.
get_batchStatus för ett listutskick.
list_scheduled / cancel_scheduledSchemalagda utskick och avbokning. send_sms och send_sms_to_list tar send_at.

Claude Code

claude mcp add --transport http texta https://texta.mer.nu/mcp \
  --header "Authorization: Bearer txa_DIN_NYCKEL"

Claude Desktop / Cursor / andra klienter

{
  "mcpServers": {
    "texta": {
      "url": "https://texta.mer.nu/mcp",
      "headers": { "Authorization": "Bearer txa_DIN_NYCKEL" }
    }
  }
}

Servern är stateless: varje anrop autentiseras separat, och ingen SSE-ström behövs. Klienter som kräver en GET-ström får 405 och ska då använda ren POST enligt MCP-specifikationen 2025-03-26.