Başlarken
DATASSL Reseller API v3.0, bayi hesabınız üzerinden SSL sertifikası siparişlerini, fatura işlemlerini ve kredi ödemelerini programatik olarak yönetmenizi sağlar.
Gereksinimler
- Aktif bir bayi hesabı ve tanımlı bayi grubu
- API anahtarı (bayi panelinizden oluşturabilirsiniz)
- API erişimi açık olmalı (Panel > API & Entegrasyonlar)
Base URL
https://www.datassl.com/api/reseller/
İstek Formatı
Tüm istekler ve yanıtlar JSON formatındadır.
Content-Type: application/json
Accept: application/json
Genel Yanıt Yapısı
// Başarılı
{
"success": true,
"message": "İşlem açıklaması",
...data
}
// Hata
{
"success": false,
"error": "Hata mesajı"
}
Kimlik Doğrulama
Tüm API isteklerinde aşağıdaki yöntemlerden birini kullanın:
Yöntem 1: X-API-Key Header
X-API-Key: YOUR_API_KEY
Yöntem 2: Bearer Token
Authorization: Bearer YOUR_API_KEY
API Anahtarı Nasıl Alınır?
- Bayi panelinize giriş yapın
- API & Entegrasyonlar sayfasını açın
- "API Anahtarı Oluştur" butonuna tıklayın
- Oluşturulan anahtarı güvenli bir yerde saklayın
Tüm Endpoint'ler
| Method |
Endpoint |
Açıklama |
| GET | /products | Ürün listesi (filtre destekli) |
| GET | /products/{id} | Ürün detayı + SAN fiyatları |
| GET | /san-pricing/{id} | SAN/Wildcard SAN fiyatlandırması |
| GET | /orders | Sipariş listesi (filtre destekli) |
| GET | /orders/{id} | Sipariş detayı |
| POST | /orders | Yeni sipariş oluştur (SAN destekli) |
| PUT | /orders/{id} | Sipariş işlemleri (iptal) |
| POST | /ssl/configure | SSL yapılandırma (CSR, DCV, admin bilgileri) |
| GET | /ssl/{order_id} | SSL durum sorgulama + doğrulama detayları |
| POST | /ssl/resend-validation | Doğrulama e-postasını tekrar gönder |
| POST | /ssl/change-dcv | DCV yöntemini değiştir |
| POST | /ssl/reissue | Sertifika yeniden düzenle (reissue) |
| POST | /csr/decode | CSR decode (domain, org, SAN bilgileri) |
| GET | /invoices | Fatura listesi |
| GET | /invoices/{id} | Fatura detayı |
| GET | /credits | Kredi bakiyesi + işlem geçmişi |
| POST | /credits | Kredi ile sipariş öde |
| GET | /balance | Bakiye ve son işlemler |
| GET | /certificate/{order_id} | Sertifika durum bilgisi |
| GET | /certificate/{order_id}/download | Sertifika indir (PEM + CA Bundle) |
| GET | /account | Hesap bilgileri |
| GET | /stats | İstatistikler ve grafikler |
Ürünler
Grup Bazlı Erişim: API, sadece bayi grubunuza tanımlanmış ürünleri döndürür. Fiyatlar otomatik olarak grup özel fiyatları ile hesaplanır.
Ürün Listesi
GET /products
Filtre Parametreleri
brand | Marka filtresi (Sectigo, DigiCert, Thawte...) |
type | Tür filtresi (ssl, wildcard, multi-domain, code-signing) |
validation | Doğrulama tipi (dv, ov, ev) |
GET /products?brand=Sectigo&type=ssl&validation=dv
Yanıt
{
"success": true,
"products": [
{
"id": 1,
"name": "Sectigo PositiveSSL",
"brand": "Sectigo",
"type": "ssl",
"validation_type": "dv",
"domain_type": "single",
"list_price": 49.99,
"list_pricing": { "1": 49.99, "2": 89.99, "3": 119.99 },
"reseller_price": 12.99,
"pricing": { "1": 12.99, "2": 22.99, "3": 29.99 },
"max_years": 3,
"warranty": "$50,000",
"san_enabled": false
}
],
"count": 25,
"group_id": 1,
"note": "Sadece grubunuza tanımlanmış ürünler listelenmektedir."
}
Ürün Detayı
GET /products/{id}
Tek ürün için SAN fiyatları, tüm multi-year pricing ve tüm detay bilgileri döner.
SAN Fiyatlandırması
GET /san-pricing/{product_id}
Ürüne ait SAN ve Wildcard SAN fiyatlarını detaylı olarak döndürür.
Siparişler
Sipariş Listesi
GET /orders
Filtre Parametreleri
status | Durum filtresi (pending, processing, completed, cancelled) |
domain | Domain araması |
limit | Sayfa başına kayıt (maks. 100, varsayılan 50) |
offset | Başlangıç noktası (sayfalama) |
GET /orders?status=pending&limit=20&offset=0
Sipariş Detayı
GET /orders/{id}
Yeni Sipariş Oluştur
POST /orders
Body Parametreleri
product_id * | Ürün ID (grubunuzda tanımlı olmalı) |
domain * | Domain adı (kod imzalama hariç) |
period | Süre (ay, varsayılan 12) |
san_count | Ek SAN sayısı |
san_wildcard_count | Ek Wildcard SAN sayısı |
Otomatik Kredi Ödemesi
Sipariş oluşturulduğunda tutar otomatik olarak kredi bakiyenizden kesilir. Yetersiz bakiye durumunda sipariş oluşturulamaz (HTTP 402).
// Örnek istek
{
"product_id": 1,
"domain": "example.com",
"period": 12,
"san_count": 2,
"san_wildcard_count": 0
}
Yanıt
{
"success": true,
"message": "Sipariş başarıyla oluşturuldu",
"order_id": 12345,
"order_number": "ORD-2026-0042",
"domain": "example.com",
"base_price": 49.99,
"san_total": 15.98,
"discount_amount": 37.00,
"total": 28.97,
"status": "pending",
"payment_status": "paid",
"credit_used": 28.97,
"new_balance": 1221.03,
"invoice_number": "INV-2026-0078"
}
Sipariş İptal Et
PUT /orders/{id}
// Body
{ "action": "cancel" }
Sadece pending veya processing durumundaki siparişler iptal edilebilir.
Sipariş Durumları
pending | Beklemede (ödeme bekleniyor) |
processing | İşleniyor |
validation_pending | Domain doğrulama bekleniyor |
pending_configuration | Yapılandırma bekleniyor |
completed | Tamamlandı / Aktif |
cancelled | İptal edildi |
expired | Süresi dolmuş |
SSL Yönetimi
SSL endpoint'leri sipariş sonrası sertifika yapılandırma, durum sorgulama, DCV değişikliği ve reissue işlemleri için kullanılır.
SSL Yapılandırma
POST /ssl/configure
Sipariş oluşturulduktan sonra CSR ve DCV bilgilerini göndererek SSL sertifikasını yapılandırın.
order_id * | Sipariş ID |
csr * | Certificate Signing Request (PEM) |
dcv_method | Doğrulama yöntemi: email, http, https, dns (varsayılan: email) |
approver_email | Onay e-postası (email DCV için) |
SSL Durum Sorgulama
GET /ssl/{order_id}
Gerçek zamanlı durum, doğrulama detayları (HTTP/DNS/Email talimatları), SAN doğrulama bilgisi döndürür. Sertifika hazırsa otomatik kaydeder.
DCV Yöntemi Değiştir
POST /ssl/change-dcv
order_id * | Sipariş ID |
dcv_method * | Yeni DCV yöntemi: email, http, https, dns |
approver_email | Yeni onay e-postası |
Doğrulama E-postası Tekrar Gönder
POST /ssl/resend-validation
{ "order_id": 12345 }
Sertifika Yeniden Düzenle (Reissue)
POST /ssl/reissue
order_id * | Sipariş ID (aktif sertifika gerekli) |
csr | Yeni CSR (opsiyonel, boşsa mevcut kullanılır) |
dcv_method | DCV yöntemi |
approver_email | Onay e-postası |
CSR Decode
POST /csr/decode
{ "csr": "-----BEGIN CERTIFICATE REQUEST-----\n...\n-----END CERTIFICATE REQUEST-----" }
CSR'dan domain, organization, SAN listesi ve diğer bilgileri çıkarır.
Faturalar
Fatura Listesi
GET /invoices
status | Durum filtresi (unpaid, paid, cancelled, sent) |
limit | Sayfa başı kayıt (maks. 100) |
offset | Başlangıç noktası |
Yanıt
{
"success": true,
"invoices": [
{
"id": 78,
"invoice_number": "INV-2026-0078",
"order_number": "ORD-2026-0042",
"domain": "example.com",
"total": 28.97,
"currency": "USD",
"status": "unpaid",
"due_date": "2026-02-21",
"created_at": "2026-02-14 10:30:00"
}
],
"pagination": { "total": 156, "limit": 50, "offset": 0 }
}
Fatura Detayı
GET /invoices/{id}
Kredi & Ödeme
USD Bazlı: Tüm kredi bakiyeleri ve işlemler USD cinsinden tutulur.
Kredi Bakiyesi & İşlem Geçmişi
GET /credits
{
"success": true,
"balance": 1250.00,
"currency": "USD",
"transactions": [
{
"id": 45,
"amount": -28.97,
"type": "debit",
"description": "Sipariş ödemesi: ORD-2026-0042",
"balance_after": 1221.03,
"created_at": "2026-02-14 10:31:00"
},
{
"id": 44,
"amount": 500.00,
"type": "credit",
"description": "Kredi yükleme",
"balance_after": 1250.00,
"created_at": "2026-02-13 09:00:00"
}
],
"pagination": { "total": 45, "limit": 50, "offset": 0 }
}
Kredi ile Sipariş Öde
POST /credits
// İstek
{ "order_id": 12345 }
// Yanıt
{
"success": true,
"message": "Ödeme başarıyla alındı",
"order_id": 12345,
"amount_paid": 28.97,
"new_balance": 1221.03
}
Yetersiz bakiye durumunda hata döner. Ödeme öncesi bakiye kontrolü yapmanız önerilir.
Bakiye Sorgula (Kısa)
GET /balance
Son 10 işlem ile birlikte bakiye bilgisini döndürür.
Sertifika
Sertifika Durumu
GET /certificate/{order_id}
{
"success": true,
"certificate": {
"order_id": 12345,
"domain": "example.com",
"product": "Sectigo PositiveSSL",
"brand": "Sectigo",
"status": "completed",
"valid_from": "2026-02-14",
"valid_till": "2027-02-14",
"has_certificate": true,
"has_ca_bundle": true,
"days_remaining": 365,
"is_expired": false
}
}
Sertifika İndir
GET /certificate/{order_id}/download
{
"success": true,
"certificate": {
"domain": "example.com",
"valid_from": "2026-02-14",
"valid_till": "2027-02-14",
"certificate_pem": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"ca_bundle": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"private_key_note": "Private key sipariş oluşturulurken size iletilmiştir."
}
}
İstatistikler
GET /stats
Bayi hesabınıza ait kapsamlı istatistikleri ve grafik verileri döndürür.
{
"success": true,
"stats": {
"total_orders": 156,
"active_orders": 89,
"pending_orders": 3,
"total_revenue": 15420.00,
"monthly_revenue": 2340.00,
"credit_balance": 1250.00
},
"charts": {
"daily_sales": [
{ "date": "2026-02-13", "orders": 5, "revenue": 245.50 },
{ "date": "2026-02-14", "orders": 3, "revenue": 189.97 }
],
"brand_distribution": [
{ "brand": "Sectigo", "count": 78 },
{ "brand": "DigiCert", "count": 45 }
],
"status_distribution": {
"completed": 89,
"pending": 3,
"processing": 5,
"cancelled": 12
}
}
}
Hesap Bilgileri
GET /account
{
"success": true,
"reseller": {
"id": 42,
"name": "Bayi Adı",
"email": "bayi@example.com",
"company": "Örnek Şirket Ltd.",
"discount_rate": 30.0,
"credit_balance": 1250.00,
"stats": {
"order_count": 156,
"total_revenue": 15420.00
}
}
}
Hata Kodları
| Kod | Anlam | Açıklama |
| 400 | Bad Request | Geçersiz veya eksik parametreler |
| 401 | Unauthorized | Geçersiz API anahtarı veya API erişimi kapalı |
| 403 | Forbidden | Bayi grubu tanımsız veya ürüne erişim yok |
| 404 | Not Found | Kaynak bulunamadı (sipariş, sertifika) |
| 405 | Method Not Allowed | HTTP metodu bu endpoint için desteklenmiyor |
| 500 | Server Error | Sunucu hatası |
Hata Yanıtı
{
"success": false,
"error": "Yetersiz bakiye. Gerekli: $28.97 Mevcut: $10.00"
}
Kod Örnekleri
<?php
class DataSSLClient {
private $apiKey;
private $baseUrl = 'https://www.datassl.com/api/reseller';
public function __construct($apiKey) {
$this->apiKey = $apiKey;
}
private function request($method, $endpoint, $data = null) {
$ch = curl_init($this->baseUrl . $endpoint);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $this->apiKey
]
]);
if ($method === 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
}
if ($method === 'PUT') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
}
if ($method === 'DELETE') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
}
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return json_decode($response, true);
}
// Ürünler
public function getProducts($filters = []) {
$query = $filters ? '?' . http_build_query($filters) : '';
return $this->request('GET', '/products' . $query);
}
public function getProduct($id) {
return $this->request('GET', '/products/' . $id);
}
// Siparişler
public function getOrders($filters = []) {
$query = $filters ? '?' . http_build_query($filters) : '';
return $this->request('GET', '/orders' . $query);
}
public function createOrder($data) {
return $this->request('POST', '/orders', $data);
}
public function cancelOrder($id) {
return $this->request('PUT', '/orders/' . $id, ['action' => 'cancel']);
}
// Faturalar
public function getInvoices($status = '') {
$query = $status ? '?status=' . $status : '';
return $this->request('GET', '/invoices' . $query);
}
// Kredi
public function getCredits() {
return $this->request('GET', '/credits');
}
public function payWithCredit($orderId) {
return $this->request('POST', '/credits', ['order_id' => $orderId]);
}
// Sertifika
public function getCertificateStatus($orderId) {
return $this->request('GET', '/certificate/' . $orderId);
}
public function downloadCertificate($orderId) {
return $this->request('GET', '/certificate/' . $orderId . '/download');
}
// Hesap & İstatistik
public function getAccount() { return $this->request('GET', '/account'); }
public function getBalance() { return $this->request('GET', '/balance'); }
public function getStats() { return $this->request('GET', '/stats'); }
}
// ─── Kullanım Örnekleri ───
$client = new DataSSLClient('YOUR_API_KEY');
// 1. Ürünleri listele
$products = $client->getProducts(['brand' => 'Sectigo', 'type' => 'ssl']);
// 2. Sipariş oluştur (kredi bakiyesinden otomatik kesilir)
$order = $client->createOrder([
'product_id' => 1,
'domain' => 'example.com',
'period' => 12,
'san_count' => 2
]);
// 3. Sipariş zaten ödenmiş, SSL yapılandırabilirsiniz
if ($order['success']) {
echo "Sipariş: " . $order['order_number'] . "\n";
echo "Tutar: $" . $order['total'] . "\n";
echo "Kalan bakiye: $" . $order['new_balance'] . "\n";
}
// 4. Sertifika indir
$cert = $client->downloadCertificate(12345);
if ($cert['success']) {
file_put_contents('certificate.pem', $cert['certificate']['certificate_pem']);
file_put_contents('ca-bundle.pem', $cert['certificate']['ca_bundle']);
}
?>
import requests
class DataSSLClient:
def __init__(self, api_key):
self.api_key = api_key
self.base_url = 'https://www.datassl.com/api/reseller'
self.headers = {
'Content-Type': 'application/json',
'X-API-Key': api_key
}
def get_products(self, **filters):
return requests.get(f'{self.base_url}/products', params=filters, headers=self.headers).json()
def create_order(self, data):
return requests.post(f'{self.base_url}/orders', json=data, headers=self.headers).json()
def cancel_order(self, order_id):
return requests.put(f'{self.base_url}/orders/{order_id}', json={'action': 'cancel'}, headers=self.headers).json()
def get_invoices(self, status=''):
params = {'status': status} if status else {}
return requests.get(f'{self.base_url}/invoices', params=params, headers=self.headers).json()
def pay_with_credit(self, order_id):
return requests.post(f'{self.base_url}/credits', json={'order_id': order_id}, headers=self.headers).json()
def get_certificate(self, order_id):
return requests.get(f'{self.base_url}/certificate/{order_id}', headers=self.headers).json()
def download_certificate(self, order_id):
return requests.get(f'{self.base_url}/certificate/{order_id}/download', headers=self.headers).json()
def get_stats(self):
return requests.get(f'{self.base_url}/stats', headers=self.headers).json()
def get_balance(self):
return requests.get(f'{self.base_url}/balance', headers=self.headers).json()
# ─── Kullanım ───
client = DataSSLClient('YOUR_API_KEY')
# Ürünleri listele
products = client.get_products(brand='Sectigo', type='ssl')
for p in products.get('products', []):
print(f"{p['name']} - ${p['reseller_price']}")
# Sipariş oluştur + öde
order = client.create_order({
'product_id': 1,
'domain': 'example.com'
})
if order['success']:
payment = client.pay_with_credit(order['order_id'])
print(f"Ödendi: ${payment['amount_paid']} | Bakiye: ${payment['new_balance']}")
# İstatistikler
stats = client.get_stats()
print(f"Bu ay gelir: ${stats['stats']['monthly_revenue']}")
const axios = require('axios');
class DataSSLClient {
constructor(apiKey) {
this.client = axios.create({
baseURL: 'https://www.datassl.com/api/reseller',
headers: { 'Content-Type': 'application/json', 'X-API-Key': apiKey }
});
}
async getProducts(filters = {}) {
return (await this.client.get('/products', { params: filters })).data;
}
async createOrder(data) {
return (await this.client.post('/orders', data)).data;
}
async cancelOrder(id) {
return (await this.client.put(`/orders/${id}`, { action: 'cancel' })).data;
}
async getInvoices(status = '') {
return (await this.client.get('/invoices', { params: { status } })).data;
}
async payWithCredit(orderId) {
return (await this.client.post('/credits', { order_id: orderId })).data;
}
async getCertificate(orderId) {
return (await this.client.get(`/certificate/${orderId}`)).data;
}
async downloadCertificate(orderId) {
return (await this.client.get(`/certificate/${orderId}/download`)).data;
}
async getStats() { return (await this.client.get('/stats')).data; }
async getBalance() { return (await this.client.get('/balance')).data; }
async getAccount() { return (await this.client.get('/account')).data; }
}
// ─── Kullanım ───
(async () => {
const client = new DataSSLClient('YOUR_API_KEY');
// Ürünler
const { products } = await client.getProducts({ brand: 'Sectigo' });
products.forEach(p => console.log(`${p.name} - $${p.reseller_price}`));
// Sipariş + Ödeme
const order = await client.createOrder({
product_id: 1, domain: 'example.com',
san_count: 2
});
if (order.success) {
const payment = await client.payWithCredit(order.order_id);
console.log(`Ödendi: $${payment.amount_paid}`);
}
// İstatistik
const stats = await client.getStats();
console.log(`Toplam sipariş: ${stats.stats.total_orders}`);
})();
# ─── Ürünler ───
curl -X GET "https://www.datassl.com/api/reseller/products?brand=Sectigo&type=ssl" \
-H "X-API-Key: YOUR_API_KEY"
# ─── Sipariş Oluştur ───
curl -X POST "https://www.datassl.com/api/reseller/orders" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"product_id": 1,
"domain": "example.com",
"san_count": 2
}'
# ─── Sipariş İptal ───
curl -X PUT "https://www.datassl.com/api/reseller/orders/12345" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{ "action": "cancel" }'
# ─── Faturalar ───
curl -X GET "https://www.datassl.com/api/reseller/invoices?status=unpaid" \
-H "X-API-Key: YOUR_API_KEY"
# ─── Kredi ile Öde ───
curl -X POST "https://www.datassl.com/api/reseller/credits" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{ "order_id": 12345 }'
# ─── Sertifika Durumu ───
curl -X GET "https://www.datassl.com/api/reseller/certificate/12345" \
-H "X-API-Key: YOUR_API_KEY"
# ─── Sertifika İndir ───
curl -X GET "https://www.datassl.com/api/reseller/certificate/12345/download" \
-H "X-API-Key: YOUR_API_KEY"
# ─── İstatistikler ───
curl -X GET "https://www.datassl.com/api/reseller/stats" \
-H "X-API-Key: YOUR_API_KEY"
# ─── Bakiye ───
curl -X GET "https://www.datassl.com/api/reseller/balance" \
-H "X-API-Key: YOUR_API_KEY"
# ─── Hesap Bilgileri ───
curl -X GET "https://www.datassl.com/api/reseller/account" \
-H "X-API-Key: YOUR_API_KEY"
WHMCS Modülü
WHMCS üzerinden DATASSL ürünlerini kolayca satabilirsiniz. Addon + Server modül yapısı ile tam entegrasyon.
WHMCS Addon + Server Module v3.3.0
Tam yönetim paneli, ürün oluşturucu, sipariş senkronizasyonu ve otomatik provizyon.
- WHMCS 7.x / 8.x / 9.x uyumlu
- Addon Panel: Ürün oluşturucu, sipariş yönetimi, istatistikler
- Toplu ürün ekleme ve otomatik fiyatlandırma
- Cron ile otomatik sipariş senkronizasyonu
- Admin ve müşteri arayüzü
- Sunucu ekleme gerektirmez - API gömülü gelir
Kurulum
- ZIP dosyasını indirin ve açın
- İki klasörü WHMCS dizininize kopyalayın:
modules/addons/datassl → Addon paneli
modules/servers/datassl → Provizyon modülü
- WHMCS Admin → Setup → Addon Modules → "DATASSL SSL Certificates" → Activate
- Access Control'dan admin rollerini seçin
- Addons → DATASSL → Ürün Oluşturucu ile ürünleri ekleyin
Sunucu ekleme, API anahtarı girişi gerektirmez. API bilgileri modül içinde gömülü olarak gelir.
WISECP Modülü
WISECP üzerinden DATASSL ürünlerini sunucusuz olarak satabilirsiniz.
WISECP Server Module v3.3.0
Sunucusuz SSL sertifika otomasyonu - API gömülü gelir.
- WISECP 2.x / 3.x ve tüm sürümler
- Sunucu ayarı gerektirmez - API gömülü
- Otomatik provizyon, yenileme, iptal
- SAN (multi-domain) ve Wildcard desteği
- Türkçe / İngilizce dil desteği
- Retry mantıklı API client
Kurulum
- ZIP dosyasını indirin ve açın
coremio/modules/Servers/DATASSL klasörünü WISECP dizininize kopyalayın
- WISECP Admin → Ayarlar → Sunucu Modülleri → DATASSL aktifleştirin
- Ürünler → Yeni Ürün → Modül: DATASSL seçin ve ürün dropdown'dan sertifika seçin
Sunucu ekleme veya API anahtarı girişi gerektirmez. API bilgileri modül içinde gömülü olarak gelir.