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 REST API 1.8.0 (OpenAPI 3.1.2). 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
Rå OpenAPI-spesifikasjon (YAML). Tokenet er ugjennomsiktig, varer 3 600 sekunder og har ikke refresh token. HTTP-status er fasit; status_message er ikke en stabil maskinkode, og leveringskoder er noe annet enn HTTP-status.
- 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: $INTELLIPUSH_IDEMPOTENCY_KEY" \
--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: ' . getenv('INTELLIPUSH_IDEMPOTENCY_KEY'),
],
CURLOPT_POSTFIELDS => json_encode([
'message' => 'API test from Intellipush',
'countrycode' => '+47',
'phonenumber' => '12345678',
], JSON_THROW_ON_ERROR),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$smsBody = curl_exec($sms);
if ($smsBody === false || curl_getinfo($sms, CURLINFO_RESPONSE_CODE) !== 200) {
throw new RuntimeException('SMS request failed');
}
$result = json_decode($smsBody, true, flags: JSON_THROW_ON_ERROR);
if (($result['success'] ?? null) === false) throw new RuntimeException('SMS request rejected');
echo 'SMS request accepted';
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': os.environ['INTELLIPUSH_IDEMPOTENCY_KEY']},
method='POST',
)
with urlopen(sms_request, timeout=15) as response:
result = json.load(response)
if result.get('success') is False:
raise RuntimeError('SMS request rejected')
print('SMS request accepted')
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': process.env.INTELLIPUSH_IDEMPOTENCY_KEY },
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);
const result = await smsResponse.json();
if (result.success === false) throw new Error('SMS request rejected');
console.log('SMS request accepted');
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", Environment.GetEnvironmentVariable("INTELLIPUSH_IDEMPOTENCY_KEY"));
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.
Sett INTELLIPUSH_IDEMPOTENCY_KEY i servermiljøet til en unik verdi per logiske sending før kallet. Ved et uklart utfall: bruk samme nøkkel og identisk innhold innen 24 timer. Ikke bruk en ny nøkkel per retry, og ikke gjenbruk nøkkelen for en annen melding. Eksemplene gjør ingen automatisk retry. Ikke logg tokens, mottakere eller meldingsinnhold.
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.



