Skicka SMS

Quick start

Använd exemplet nedan och byt ut ”API_NYCKEL” mot en bearer token som du skapar i användarportalen.

curl -X POST "https://api.ip1sms.com/v2/batches" \
-H "Authorization: Bearer API_NYCKEL" \
-H "Content-Type: application/json" \
-d '{
    "sender": "iP1",
    "recipients": [
        "MOTTAGARNUMMER"
    ],
    "body": "Ett fint meddelande skickat från iP.1 SMS API"
}'

Anrop

Endpoint: /v2/batches

Metod: POST

Content-Type: application/json

Exempel på anropsdata

{
    "sender": "iP1",
    "recipients":[
        "456189040623",
        "175368927054",
        "392094880589",
        "568798567631"
    ],
    "body": "A very nice message",
}

Exemplet ovan innehåller anropsdatan med de obligatoriska fälten sender, recipients och body, som krävs för att skicka ett SMS-meddelande. Se under rubriken Fält för anropsdata för en lista av samtliga fält och dess beskrivningar.

Fält för anropsdata

FältnamnObligatorisktTypBeskrivning och VillkorExempel
senderJaString Ett Anrop kommer att avslås om sender:
  • Består av ett nummer som är längre än 15 siffror
  • Består av en alfanumerisk avsändare med mindre än 3 tecken eller större än 11 tecken (Aa-Zz, 0 – 9, 3 – 11 tecken)
  • Inte matchar regex [0-9A-Za-z]{1,11} eller om den inte följer standarden E164
Ett meddelande kanske inte når mottagaren om:
  • Operatören där mottagare står registrerad inte stöder avsändaren.

"sender": "46101606060"
      
recipientsJaArray Ett Anrop kommer att avslås om recipients:
  • Är längre än 15 siffror
  • Innehåller andra tecken än siffror
Telefonnumer måste skrivas i formatet MSISDN. Varje telefonnummer analyseras och valideras där resultatet visas som en status för meddelandet. Om detta steg misslyckas skickas inte meddelandet.

"recipients":[
  "456189040623",
  "175368927054",
  "392094880589",
  "568798567631"
],
      
recipients – templatingNejNestat Objekt För att använda mallsystemet måste du konvertera din tidigare mottagar-array till en dictionary av dictionaries. Övrenivå-nyckeln är mottagarens MSISDN (telefonnummer). Andranivå-nyckeln eftersöks sedan i texten och ersätts med andranivå-värdet.

"recipients":{
  "456189040623": {
      "sign": "sent by Bob"
  },
  "175368927054": {},
  "392094880589": {},
  "568798567631": {},
  "default":{
      "sign": " sent by iP.1"
  }
}
      
bodyJaString Ett anrop kommer att misslyckas om body:
  • Är null, tomt eller enbart består av blanksteg
  • Är längre än 2000 tecken

"body": "A very nice message"

typeNejString Det finns två typer: sms och flash.
  • sms är ett vanligt SMS.
  • flash är ett meddelande som visas en gång på enheten och sedan raderas.
Standard-typen är sms.

"type": "sms"
      
datacodingNejString Det finns två typer tillgängliga:
  • gsm: 7-bitars teckenuppsättning (160 tecken/SMS), begränsat antal tecken.
  • ucs: 2-byte teckenuppsättning (70 tecken/SMS), tillåter alla tecken (t.ex. emoji).
Om gsm är satt, kommer meddelanden som kräver ucs (utökade tecken) att nekas. Standard är ucs.

"datacoding": "GSM"
      
priorityNejInteger Används för meddelanden som behöver levereras snabbt. Tillåtna värden är 1 (standard, lägsta) och 2 (högsta).

Att sätta prioritet 2 ökar priset per SMS (10 öre för svenskt konto, € 0.01 för internationellt konto).

"priority": 1
      
deliveryWindowsNejArray Möjlighet att schemalägga utskick under specifika tidsfönster (t.ex. vardagar 10:00-10:15). Du kan ha flera fönster.

Parsing-regler:
  • null i fältet opens ersätts med aktuellt datum och tid.
  • Om closes är null sätts det till 3 dagar (72 timmar) efter opens.
Anropet avslås om tidsfönster överlappar. Om inget fönster anges skapas ett automatiskt enligt reglerna ovan.

"deliveryWindows": [
    {
        "opens": "2025-11-12T17:00:19Z",
        "closes": "2025-11-18T17:00:19Z"
    },
    {
        "opens": "2025-11-20T17:00:19Z",
        "closes": "2025-11-26T17:00:19Z"
    }
],
      
deliveryReportUrlNejString Om en URL anges skickas statusuppdateringar (leveransrapporter) dit via POST. Rapporterna är separerade för varje mottagare och status.

"deliveryReportUrl": "https://ip1.net"
      
referenceNejString Tillåter användaren att sätta ett eget ID eller referens.

Restriktioner:
  • Får bestå av max 40 tecken.
  • Får inte bestå av en tom string eller blanksteg.
null är standardvärde.

"reference": "custom-id-123"
      
tagsNejstring En array av taggar som används för att kategorisera eller sortera batcher. Gör det möjligt att filtrera vid listning av batcher.

"tags": ["marketing", "auth", "admin"],
      

Respons

Responsen på ett anrop består av en JSON med fält som beskriver batchens innehåll.

Exempel på responsdata

Nedan hittar du ett exempel på svar vid lyckad request mot batches endpoint. Se under rubriken Fält för responsdata för en detaljerad beskrivning av samtliga fält i responsen.

{
    "id": "5bc86b6e85c7209830f96936",
    "sender": "46101606060",
    "body": "Hi my name is {name}",
    "owner": "ip1-XXXXX",
    "direction": "MT",
    "type": "flash",
    "datacoding": "GSM",
    "priority": 1,
    "templated": true,
    "priceSummary": {
        "total": 0.125,
        "currency": "EUR",
        "average": 0.0416
    },
    "messageSummary": {
        "101": {
          "messages": 43,
          "sms": 86
        },
        "102": {
          "messages": 3,
          "sms": 6
        },
        "201": {
          "messages": 142,
          "sms": 284
        }
    },
    "deliveryWindows": [
        {
            "opens": "ISO-8601 string",
            "closes": "ISO-8601 string"
        },
        {
            "opens": "ISO-8601 string",
            "closes": "ISO-8601 string"
        }
    ],
    "status": 112,
    "deliveryReportUrl": "https://api.example.com/sms/deliveryreport",
    "reference": "A client reference",
    "tags": ["marketing", "auth", "etc"],
}

Fält för responsdata

FältnamnTypBeskrivningExempel
idString Batchens ID.

"id": "5bc86b6e85c7209830f96936"
      
senderString Avsändaren som används för ett eller flera meddelanden.

"sender": "46101606060"
      
bodyString Den ursprungliga bodyn, alltså meddelandetexten, som skickas, före mallar har tillämpats, enligt den ursprungliga requesten.

"body": "A very nice message"

ownerStringKontonumret för SMS-kontot som står som ägare batchen

"owner": "ip1-xxxxx"
      
directionString Talar om ifall meddelandet skickades eller togs emot av vårt system.
  • MT En akronym för Mobile Terminated, ett meddelande som skickades till en mobil enhet.
  • MO En akronym för Mobile Originated, ett meddelande som skickades från en mobil enhet.

 "direction": "MT"
      
typeString Beskriver meddelandets typ.
  • sms är ett vanligt SMS.
  • flash är ett meddelande som visas en gång på enheten och sedan raderas.

"type": "sms"
      
datacodingString Talar om vilken teckenuppsättning som används för batchen.
  • gsm: 7-bitars teckenuppsättning (160 tecken/SMS), begränsat antal tecken.
  • ucs: 2-byte teckenuppsättning (70 tecken/SMS), tillåter alla tecken (t.ex. emoji).

"datacoding": "GSM"
      
priorityInteger Beskriver vilken prioritet som används för batchen.

"priority": 1
      
templatedbooleanTalar om ifall batchens body (Meddelandetxt) innehåller templating.
          
"templated": true
          
        
priceSummaryarrayGer en summering av batchens kostnad samt vilken valuta som debiterat kontot.
          
"priceSummary": {
    "total": 0.125,
    "currency": "EUR",
    "average": 0.0416
}
          
        
messageSummaryarrayGer en summering av antalet meddelande i batchen uppdelat i statusgrupper.
          
"messageSummary": {
    "101": {
      "messages": 43,
      "sms": 86
    },
    "102": {
      "messages": 3,
      "sms": 6
    },
    "201": {
      "messages": 142,
      "sms": 284
    }
}
          
        
deliveryWindowsArray Visar batchens tidsfönster

"deliveryWindows": [
    {
        "opens": "2025-11-12T17:00:19Z",
        "closes": "2025-11-18T17:00:19Z"
    },
    {
        "opens": "2025-11-20T17:00:19Z",
        "closes": "2025-11-26T17:00:19Z"
    }
],
      
statusIntegerAktuell status för batchen. Härleds från riktningen och den senaste statusen för batchens meddelanden. Tillgängliga statusar är följande:
NamnstatuskodKommentar
Planned101Batchen är schemalagd att skickas i framtiden.
Ongoing111Batchen håller på att bearbetas och skickas ut
Sent112Batchen har skickats ut
Incoming201Batchen innehåller inkommande meddelanden
Canceled203Batchen har avbrutits och kommer inte att skickas

"status": 112
      
deliveryReportUrlString Visar eventuella callback-url för mottagande av leveransrapporter till extern mjukvara.

"deliveryReportUrl": "https://ip1.net"
      
referenceString Visar batchens referens om sådan finns.

"reference": "custom-id-123"
      
tagsstring visar eventuella taggar i batchen.

"tags": ["marketing", "auth", "admin"],
      

Kodexempel

Nedan hittar du ett enkelt kodexempel med autentisering och funktionalitet för att skicka ett SMS.

Skicka ett SMS i C#

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("https://api.ip1sms.com/v2/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "API Key");

    var sms = new OutgoingSMS()
    {
        Sender = "iP1",
        Recipients = new List<string>() { "46712345678" },
        Body = "Test message rest v2",
    };

    HttpResponseMessage response = await client.PostAsJsonAsync("batches", sms);

    if (response.IsSuccessStatusCode)
    {
        Console.WriteLine("Sent");
    }
    else
    {
        Console.WriteLine("Failed, " + response.StatusCode + ": " + await response.Content.ReadAsStringAsync());
    }
}
    
public class OutgoingSMS
{
    public string Sender { get; set; }
    public List<string> Recipients { get; set; }
    public string Body { get; set; }
}

Skicka ett SMS i PHP

$conf = array(
    'password' => 'API key',
    'apiUrl' => 'api.ip1sms.com/v2/',
    'method' => 'POST',
    'endpoint' => 'batches',
);

$message = array(
    "sender" => "iP1",
    "recipients" => ["46712345678"],
    "body" => "Test message rest v2",
);

$jsonEncodedMessage = json_encode($message);
// Set up request options
$options = array(
    'http' => array(
        'header'  => array(
            'Content-Type: application/json',
            'Authorization: Bearer '.$conf['password'],
            'Content-Length: ' . strlen($jsonEncodedMessage)
        ),
        'method'  => $conf['method'],
        'content' => $jsonEncodedMessage,
    )
);

$url = "https://" . $conf['apiUrl'] . $conf['endpoint'];
$context  = stream_context_create($options);
// Send the request
$response = file_get_contents($url, false, $context);
// Print the response
echo $response;

Skicka ett SMS i Visual Basic

Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Net.Http.Json

Module Module1
    Sub Main()
        Dim client As New HttpClient()

        client.BaseAddress = New Uri("https://api.ip1sms.com/v2/")
        client.DefaultRequestHeaders.Accept.Clear()
        client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
        client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "API Key")

        Dim sms As New OutgoingSMS()
        sms.Sender = "iP1"
        sms.Recipients = New List(Of String)() From {"46712345678"}
        sms.Body = "Test message rest v2"

        Dim response As HttpResponseMessage = client.PostAsJsonAsync("batches", sms).Result

        If response.IsSuccessStatusCode Then
            Console.WriteLine("Sent")
        Else
            Console.WriteLine("Failed, " & response.StatusCode.ToString() & ": " & response.Content.ReadAsStringAsync().Result)
        End If
    End Sub
End Module

Public Class OutgoingSMS
    Public Property Sender As String
    Public Property Recipients As List(Of String)
    Public Property Body As String
End Class

Felsökning

I detta avsnitt hittar du HTTP-felstatuskoder och vanligt förekommande fel för enskilda anropsfält.

Vanliga felstatuskoder

KodNamnBetydelseKlass
400Bad RequestServern kan inte förstå förfrågan, ofta på grund av ogiltig syntax (t.ex. felaktigt formaterad JSON-data).Klientfel
401UnauthorizedKlienten måste autentisera sig för att få åtkomst till resursen (t.ex. saknas en API-nyckel eller inloggningstoken).Klientfel
403ForbiddenKlienten har autentiserat sig, men saknar behörighet att utföra åtgärden (t.ex. en vanlig användare försöker radera andras data).Klientfel
404Not FoundServern har inte hittat resursen som efterfrågades (t.ex. en specifik resurs med ett ID som inte finns).Klientfel
405Method Not AllowedHTTP-metoden som används är inte tillåten för resursen (t.ex. försöker POST:a till en resurs som endast accepterar GET).Klientfel
409ConflictBegäran kunde inte slutföras på grund av en konflikt med resursens nuvarande tillstånd (t.ex. försöker skapa en resurs som redan existerar).Klientfel
500Internal Server ErrorEtt generiskt felmeddelande som indikerar att ett oväntat tillstånd på servern hindrade den från att uppfylla begäran.Serverfel
503Service UnavailableServern är för närvarande inte tillgänglig (t.ex. överbelastad eller nere för underhåll).Serverfel

Felsökning specifika fält

Varje felaktigt anrop som triggar en felstatuskod innehåller en detaljerad beskrivning i respons-bodyn. Du kan extrahera denna text programmatiskt för att få en mer tydlig bild av vad som gick fel. Om du inte kan avläsa felet i response-bodyn så kan du utgå från listan nedan för att felsöka ditt misslyckade anrop.

sender

  1. Säkerställ att tilläggstjänsten "Valfri avsändare" finns aktiverad på kontot. Du kan aktivera "Valfri avsändare" i webshopen eller via någon av våra webbtjänster.
  2. Säkerställ att avsändaren finns registrerad på kontot i användarportalen.
  3. Om avsändaren består av ett nummer, säkerställ att numret inte är längre än 15 siffror.
  4. Om en alfanumerisk avsändare används, säkerställ att den består av 3 - 11 tecken, Aa - Zz, 0 - 9.

body

  1. Säkerställ att meddelandetexten inte överstiger 2000 tecken.
  2. Kontrollera texten innehåll för att utesluta att den innehåller olämpligt eller reglerat innehåll vilket kan trigga spärrtjänster hos vissa operatörer.

recipients

  1. Se till att numret du försöker skicka till är i formatet MSISDN (4612345678), alltså ett nummer med landskod, utan + eller dubbla nollor framför.