API og integrasjoner

SMS API-eksempler: send din første SMS med cURL, PHP, Python, Node.js og C#

Kanoniske eksempler på OAuth 2.0 og én kontrollert SMS med Intellipush REST API i fem vanlige utviklerspråk.

Utgitt av Intellipush · Produkt- og faginnhold fra teamet i Fredrikstad

Fem kodevinduer kobles gjennom et API til én kontrollert SMS på en mobiltelefon.

Denne guiden viser den samme, kontrollerte SMS-flyten med cURL, PHP, Python, Node.js og C#. Hvert eksempel henter først et OAuth 2.0-token og oppretter deretter én SMS til et nummer du kontrollerer.

Eksemplene er kontrollert mot Intellipush OpenAPI 7. september 2026. Den interaktive API-dokumentasjonen er alltid den tekniske fasiten for endepunkter, felt, capabilities og svar. Et godkjent opprettelsessvar betyr at meldingen er registrert, ikke at den er levert til telefonen.

Før du starter

  • Opprett en Intellipush-konto og hent API ID og API Secret på en trygg måte.
  • Lagre hemmelighetene i servermiljøet, ikke i nettleserkode, mobilapp eller offentlig repository.
  • Bruk ditt eget testnummer og lavt volum. Opprettelse kan bruke SMS credits.
  • Sett en eksplisitt timeout og håndter 400-, 401-, 403-, 409-, 5xx- og nettverksfeil.

Den kanoniske tokenflyten er POST https://api.intellipush.com/restv2/token med HTTP Basic, innholdstype application/x-www-form-urlencoded og kroppen grant_type=client_credentials. Tokenet er et Bearer-token. Ikke legg API ID eller hemmelighet i JSON-kroppen for nye integrasjoner.

cURL

export INTELLIPUSH_API_ID="your_api_id"
export INTELLIPUSH_API_SECRET="your_api_secret"

TOKEN=$(curl --fail --silent --show-error \
  --request POST https://api.intellipush.com/restv2/token \
  --user "$INTELLIPUSH_API_ID:$INTELLIPUSH_API_SECRET" \
  --header "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "grant_type=client_credentials" | jq -r '.access_token')

curl --fail --silent --show-error \
  --request POST https://api.intellipush.com/restv2/sms/create \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/json" \
  --header "Idempotency-Key: first-test-001" \
  --data '{"message":"API test from Intellipush","countrycode":"+47","phonenumber":"12345678"}'

PHP 8 med cURL

<?php
$apiId = getenv('INTELLIPUSH_API_ID');
$apiSecret = getenv('INTELLIPUSH_API_SECRET');

$token = curl_init('https://api.intellipush.com/restv2/token');
curl_setopt_array($token, [
    CURLOPT_POST => true,
    CURLOPT_USERPWD => $apiId . ':' . $apiSecret,
    CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'],
    CURLOPT_POSTFIELDS => http_build_query(['grant_type' => 'client_credentials']),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 15,
]);
$tokenBody = curl_exec($token);
if ($tokenBody === false || curl_getinfo($token, CURLINFO_RESPONSE_CODE) !== 200) {
    throw new RuntimeException('Token request failed');
}
$accessToken = json_decode($tokenBody, true, flags: JSON_THROW_ON_ERROR)['access_token'];

$sms = curl_init('https://api.intellipush.com/restv2/sms/create');
curl_setopt_array($sms, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $accessToken,
        'Content-Type: application/json',
        'Idempotency-Key: first-test-001',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'message' => 'API test from Intellipush',
        'countrycode' => '+47',
        'phonenumber' => '12345678',
    ], JSON_THROW_ON_ERROR),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 15,
]);
echo curl_exec($sms);

Python 3 – bare standardbiblioteket

import base64, json, os
from urllib.parse import urlencode
from urllib.request import Request, urlopen

credentials = f"{os.environ['INTELLIPUSH_API_ID']}:{os.environ['INTELLIPUSH_API_SECRET']}"
basic = base64.b64encode(credentials.encode()).decode()
token_request = Request(
    'https://api.intellipush.com/restv2/token',
    data=urlencode({'grant_type': 'client_credentials'}).encode(),
    headers={'Authorization': f'Basic {basic}', 'Content-Type': 'application/x-www-form-urlencoded'},
    method='POST',
)
with urlopen(token_request, timeout=15) as response:
    access_token = json.load(response)['access_token']

payload = json.dumps({'message': 'API test from Intellipush', 'countrycode': '+47', 'phonenumber': '12345678'}).encode()
sms_request = Request(
    'https://api.intellipush.com/restv2/sms/create', data=payload,
    headers={'Authorization': f'Bearer {access_token}', 'Content-Type': 'application/json', 'Idempotency-Key': 'first-test-001'},
    method='POST',
)
with urlopen(sms_request, timeout=15) as response:
    print(json.load(response))

Node.js 18+

const apiId = process.env.INTELLIPUSH_API_ID;
const apiSecret = process.env.INTELLIPUSH_API_SECRET;
const basic = Buffer.from(apiId + ':' + apiSecret).toString('base64');

const tokenResponse = await fetch('https://api.intellipush.com/restv2/token', {
  method: 'POST',
  headers: { Authorization: 'Basic ' + basic, 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({ grant_type: 'client_credentials' }),
  signal: AbortSignal.timeout(15000)
});
if (!tokenResponse.ok) throw new Error('Token request failed: ' + tokenResponse.status);
const { access_token } = await tokenResponse.json();

const smsResponse = await fetch('https://api.intellipush.com/restv2/sms/create', {
  method: 'POST',
  headers: { Authorization: 'Bearer ' + access_token, 'Content-Type': 'application/json', 'Idempotency-Key': 'first-test-001' },
  body: JSON.stringify({ message: 'API test from Intellipush', countrycode: '+47', phonenumber: '12345678' }),
  signal: AbortSignal.timeout(15000)
});
if (!smsResponse.ok) throw new Error('SMS request failed: ' + smsResponse.status);
console.log(await smsResponse.json());

C# med HttpClient

using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;

using var client = new HttpClient { Timeout = TimeSpan.FromSeconds(15) };
var basic = Convert.ToBase64String(Encoding.UTF8.GetBytes(
    Environment.GetEnvironmentVariable("INTELLIPUSH_API_ID") + ":" +
    Environment.GetEnvironmentVariable("INTELLIPUSH_API_SECRET")));
using var tokenRequest = new HttpRequestMessage(HttpMethod.Post, "https://api.intellipush.com/restv2/token");
tokenRequest.Headers.Authorization = new AuthenticationHeaderValue("Basic", basic);
tokenRequest.Content = new FormUrlEncodedContent(new Dictionary<string, string> { ["grant_type"] = "client_credentials" });
using var tokenResponse = await client.SendAsync(tokenRequest);
tokenResponse.EnsureSuccessStatusCode();
var tokenJson = JsonDocument.Parse(await tokenResponse.Content.ReadAsStringAsync());
var accessToken = tokenJson.RootElement.GetProperty("access_token").GetString();

using var smsRequest = new HttpRequestMessage(HttpMethod.Post, "https://api.intellipush.com/restv2/sms/create");
smsRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
smsRequest.Headers.Add("Idempotency-Key", "first-test-001");
smsRequest.Content = new StringContent(JsonSerializer.Serialize(new {
    message = "API test from Intellipush", countrycode = "+47", phonenumber = "12345678"
}), Encoding.UTF8, "application/json");
using var smsResponse = await client.SendAsync(smsRequest);
smsResponse.EnsureSuccessStatusCode();

Hva du må gjøre før produksjon

Ikke kopier eksemplet direkte inn i en løkke for mange mottakere. Skill konfigurasjon fra kode, bruk en hemmelighetstjeneste, begrens tilgang og bygg inn eksplisitte volumgrenser. Kontroller /capabilities før valgfrie funksjoner brukes.

En stabil Idempotency-Key for samme logiske opprettelseskall beskytter mot doble meldinger ved et uklart nettverksutfall når funksjonen er tilgjengelig. Ikke bruk X-Request-ID som idempotensnøkkel; ta i stedet vare på den som teknisk referanse ved support.

Lagre ID-en fra opprettelsessvaret og bruk det dokumenterte statusendepunktet når arbeidsflyten trenger leveringsinformasjon. Les guiden til status og feilsøking før du bestemmer retry- og eskaleringsregler.

Åpne den interaktive API-dokumentasjonen, eller opprett en konto for en kontrollert test.

Relevant neste steg

Planlegger du en SMS-integrasjon?

Se hvordan REST API, OAuth 2.0 og en tydelig driftsmodell henger sammen.

Finn svar i FAQ →Slik beregnes SMS-kostnaden →