API & MCP
Allt du behöver för att skicka SMS från ditt system eller din AI-assistent.
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ält | Typ | Beskrivning |
|---|---|---|
to | sträng | Mottagare. +46701234567 eller 0701234567 (svenskt nummer utan landskod får +46). |
message | sträng | Meddelandetext. Max 6 SMS-delar (918 tecken GSM-7 / 402 tecken UCS-2). |
from | sträng, valfri | Avsä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:
| Verktyg | Gör |
|---|---|
send_sms | Skickar ett SMS (to, message, valfritt from). Kostar pengar. |
estimate_sms | Räknar delar och pris för en text utan att skicka. |
list_sms | Senaste meddelandena med status. |
get_sms | Ett meddelande med leveransstatus. |
get_account | Pris, status och förbrukning. |
list_contact_lists | Kontaktlistor, med kontakter om man ber om det. |
send_sms_to_list | Samma SMS till alla i en lista, {namn} personaliseras. Kostar pengar per mottagare. |
get_batch | Status för ett listutskick. |
list_scheduled / cancel_scheduled | Schemalagda 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.