نمونه کد چندزبانه

نمونه‌های این صفحه یک پیام را با POST /v1/messages ارسال می‌کنند. در همه زبان‌ها سه اصل یکسان است: X-API-Key فقط در Backend نگهداری شود، Idempotency-Key برای هر عملیات جدید یکتا باشد و در Retry همان مقدار قبلی دوباره استفاده شود.

cURL

curl -X POST "https://service.smsdaily.ir/v1/messages" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Idempotency-Key: 5c88a3d2-65ce-4cc1-9ea0-1d7efe675d40" \
  -H "Content-Type: application/json" \
  -d '{
    "sender": "300099000121",
    "recipient": "09121234567",
    "message": "پیام آزمایشی SMSDaily",
    "clientReference": "order-140501"
  }'

C# / .NET

برای پروژه‌های .NET بهتر است یک HttpClient مدیریت‌شده از IHttpClientFactory داشته باشید. نمونه ساده زیر برای نمایش قرارداد است:

using System.Net.Http.Json;

var apiKey = Environment.GetEnvironmentVariable("SMSDAILY_API_KEY")
    ?? throw new InvalidOperationException("SMSDAILY_API_KEY is not configured.");

using var client = new HttpClient
{
    BaseAddress = new Uri("https://service.smsdaily.ir")
};

using var request = new HttpRequestMessage(HttpMethod.Post, "/v1/messages")
{
    Content = JsonContent.Create(new
    {
        sender = "300099000121",
        recipient = "09121234567",
        message = "پیام آزمایشی SMSDaily",
        clientReference = "order-140501"
    })
};

request.Headers.Add("X-API-Key", apiKey);
request.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());

using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();

Console.WriteLine($"HTTP {(int)response.StatusCode}");
Console.WriteLine(body);

در برنامه واقعی، برای Timeout یا خطای موقت شبکه همان Idempotency-Key عملیات را نگه دارید و Request را با همان مقدار Retry کنید.

PHP

<?php
$apiKey = getenv('SMSDAILY_API_KEY');
$idempotencyKey = bin2hex(random_bytes(16));

$payload = [
    'sender' => '300099000121',
    'recipient' => '09121234567',
    'message' => 'پیام آزمایشی SMSDaily',
    'clientReference' => 'order-140501'
];

$ch = curl_init('https://service.smsdaily.ir/v1/messages');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'X-API-Key: ' . $apiKey,
        'Idempotency-Key: ' . $idempotencyKey,
        'Content-Type: application/json'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload, JSON_UNESCAPED_UNICODE)
]);

$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

echo "HTTP $status\n";
echo $body;

Python

import os
import uuid
import requests

api_key = os.environ["SMSDAILY_API_KEY"]

response = requests.post(
    "https://service.smsdaily.ir/v1/messages",
    headers={
        "X-API-Key": api_key,
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "sender": "300099000121",
        "recipient": "09121234567",
        "message": "پیام آزمایشی SMSDaily",
        "clientReference": "order-140501",
    },
    timeout=20,
)

print(response.status_code)
print(response.json())

JavaScript / Node.js

این نمونه برای Backend مبتنی بر Node.js است. API Key را در JavaScript سمت مرورگر قرار ندهید.

import crypto from 'node:crypto';

const apiKey = process.env.SMSDAILY_API_KEY;

const response = await fetch('https://service.smsdaily.ir/v1/messages', {
  method: 'POST',
  headers: {
    'X-API-Key': apiKey,
    'Idempotency-Key': crypto.randomUUID(),
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    sender: '300099000121',
    recipient: '09121234567',
    message: 'پیام آزمایشی SMSDaily',
    clientReference: 'order-140501'
  })
});

console.log(response.status);
console.log(await response.json());

Java

نمونه زیر از java.net.http.HttpClient استاندارد استفاده می‌کند:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.UUID;

var apiKey = System.getenv("SMSDAILY_API_KEY");
var json = """
{
  "sender":"300099000121",
  "recipient":"09121234567",
  "message":"پیام آزمایشی SMSDaily",
  "clientReference":"order-140501"
}
""";

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://service.smsdaily.ir/v1/messages"))
    .header("X-API-Key", apiKey)
    .header("Idempotency-Key", UUID.randomUUID().toString())
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(json))
    .build();

var response = HttpClient.newHttpClient()
    .send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.statusCode());
System.out.println(response.body());

پاسخ موفق

برای پیام جدید معمولاً 202 Accepted دریافت می‌شود:

{
  "trackingCode": "SMS-20260808-A1B2C3D4",
  "status": "queued",
  "encoding": "Persian",
  "characterCount": 23,
  "partCount": 1,
  "submittedAt": "2026-08-08T05:30:00Z",
  "duplicate": false
}

202 به معنی پذیرفته‌شدن درخواست است، نه تحویل نهایی پیام. وضعیت را با GET /v1/messages/{trackingCode} یا Endpoint وضعیت گروهی پیگیری کنید.