Türkçe · English
Persentil API
Kendi sitenizde WHO, CDC ve Neyzi referanslarıyla persentil ve z skoru. Hesap, pediatrirutinleri.com persentil hesaplayıcısıyla aynıdır.
Gömülü form
Kod yazmadan: sayfanıza iki satır eklersiniz, hesaplayıcı sitenizde açılır. Anahtar gerekmez; form yalnızca onaylı alan adlarınızda çalışır.
API
Kendi arayüzünüz ve sunucunuz için: ölçümleri sunucunuzdan gönderir, JSON sonuç alırsınız. Tekli ya da bir istekte 100 ölçüme kadar.
1. Başvuru ve anahtar
- Pediatri Rutinleri hesabınızla giriş yapın (mobil uygulamadaki hesabınız da geçerli; yoksa ücretsiz üye olun) ve Persentil API hizmet sayfasından başvurun: kurum, web siteniz, kullanım amacınız; API için sunucu IP adresleriniz, gömülü form için alan adlarınız. Başvuru hesabınıza bağlanır, sonuç hesabınızın e-posta adresine gelir.
- Her başvuru yönetici tarafından incelenir ve size e-postayla dönülür. Kullanım şimdilik günlük kotayla ücretsizdir.
- Gömülü form onaylanırsa gömme kodu e-postayla gelir.
- API onaylanırsa tek kullanımlık bir bağlantı gelir (72 saat geçerli). Anahtar, bağlantıda “Anahtarı göster” düğmesine bastığınızda üretilir ve yalnızca bir kez gösterilir. Anahtar e-postayla gönderilmez, bizde de düz metin olarak saklanmaz. Kaybederseniz yenisi verilir.
2. Gömülü form
Onay e-postasındaki kodu sayfanıza ekleyin (SITE_KIMLIGI size verilen kimliktir):
<iframe src="https://pediatrirutinleri.com/api/widget/?site=SITE_KIMLIGI"
title="Persentil hesaplayıcı" style="width:100%;min-height:720px;border:0"
loading="lazy" referrerpolicy="strict-origin"></iframe>
<script src="https://pediatrirutinleri.com/api/widget/gomme.js" async></script>
gomme.jsçerçevenin yüksekliğini içeriğe göre ayarlar; eklemezsenizmin-heightdeğeri kullanılır.- İsteğe bağlı parametreler:
&ref=cdc(varsayılan seçili referans:who,cdc,neyzi),&color=2f6f5f(düğme rengi, # olmadan). - Form yalnızca başvuruda bildirdiğiniz HTTPS alan adlarında açılır. Yeni alan adı (ör.
www.ile) için bize yazın. - Ziyaretçi başına dakikalık bir sınır ve siteniz için günlük bir hesap sınırı vardır; ihtiyacınız artarsa sınırı yükseltebiliriz.
- Sonuçlarla birlikte boy, kilo, baş çevresi ve BMI için büyüme eğrisi grafiği gösterilir.
Sitenizde Content-Security-Policy (CSP) varsa
Form görünmüyorsa büyük olasılıkla sitenizin güvenlik politikası dış çerçeveleri engelliyordur. CSP başlığınıza şunu ekleyin:
frame-src … https://pediatrirutinleri.com
script-src … https://pediatrirutinleri.com (isteğe bağlı: yalnızca otomatik yükseklik için)
script-src eklemezseniz form yine çalışır; yalnızca gomme.js yüklenmez ve çerçeve, kodda verilen min-height ile sabit kalır. CSP'nizi değiştiremiyorsanız API ile kendi formunuzu kullanın.
3. API
POST https://pediatrirutinleri.com/api/v1/persentil.php
| Başlık | Değer |
|---|---|
Authorization | Bearer prk_live_… (adres satırına konmaz) |
Content-Type | application/json |
User-Agent | Uygulamanızın adı. User-Agent'sız istekleri sunucu koruması reddedebilir. |
İstek
{
"id": "olcum-8812",
"ref": "who",
"sex": 1,
"bday": "2024-03-15",
"tday": "2026-10-01",
"height": 89.4,
"measure": "h",
"weight": 12.6,
"hc": 47.5,
"gaw": 34,
"gad": 2,
"mheight": 162,
"dheight": 178,
"lang": "tr"
}
Toplu: {"items": [ {…}, {…} ]} (en çok 100 ölçüm).
| Alan | Zorunlu | Açıklama |
|---|---|---|
ref | evet | Referans: who, cdc, neyzi |
sex | evet | Cinsiyet: 1 = kız, 2 = erkek |
bday + tday | biri | Doğum tarihi + ölçüm tarihi, YYYY-AA-GG; ikisi birlikte |
agedays | ya da bu | Kronolojik yaş, gün (0–7305) |
height / weight / hc | en az biri | Boy cm (20–250) / kilo kg (0.2–300) / baş çevresi cm (15–80) |
measure | hayır | Boy ölçüm şekli: l = yatarak, h = ayakta. Referansın beklediğinden farklıysa boy düzeltilir (CDC 0.8 cm, WHO/Neyzi 0.7 cm). Verilmezse düzeltme yapılmaz. |
gaw, gad | hayır | Prematüre doğum haftası 22–36 ve günü 0–6 (tamsayı). Kronolojik 24 aya kadar düzeltilmiş yaş kullanılır. |
mheight, dheight | hayır | Anne ve baba boyu, cm; ikisi birlikte verilirse hedef boy |
id | hayır | Kendi kaydınızla eşlemek için kısa teknik kimlik: en çok 64 karakter, harf, rakam ve _ . : -. Yanıtta aynen döner. |
lang | hayır | Hata iletilerinin dili: tr (varsayılan) ya da en. Verilmezse Accept-Language başlığına bakılır. Alan adları ve kodlar dilden bağımsızdır. |
graph | hayır | true: büyüme eğrileri de gelir (yalnız tekli istekte, aşağıya bakın) |
Sayılar JSON sayısı (89.4) ya da noktalı metin ("89.4") olabilir. Tanınmayan alanlar yok sayılır.
Yanıt
{
"success": true,
"result": {
"id": "olcum-8812", "ref": "who", "sex": 1,
"age": { "months": 29.3, "chrono": {"total_days": 930, "years": 2, "months": 6, "days": 16}, "corrected": null },
"preterm": { "applied": false, "reason": "over_24_months", "gaw": 34, "gad": 2, "corr_days": null, "pma_days": null },
"height": { "measured": 89.4, "used": 90.1,
"measure_adj": {"measure": "h", "expected": "l", "diff_cm": 0.7},
"z": 0.12, "p": 54.78, "height_age_m": 28.4, "ideal_weight": 12.9 },
"weight": { "value": 12.6, "z": -0.05, "p": 47.9, "rel_weight": 98 },
"hc": { "value": 47.5, "z": 0.3, "p": 61.2 },
"bmi": { "value": 15.52, "z": …, "p": … },
"wfh": { "z": …, "p": … },
"target": { "cm": 163.5, "low": 156.5, "high": 170.5, "z": 0.21 }
},
"request_id": "9f2c…"
}
| Alan | Anlamı |
|---|---|
age.months | Hesapta kullanılan yaş, ay (prematürede düzeltilmiş) |
age.chrono / age.corrected | Kronolojik / düzeltilmiş yaş: toplam gün, yıl, ay, gün |
preterm | Prematüre düzeltmesi (gaw verilmediyse null). reason: over_24_months (kronolojik yaş 24 ayı geçti), invalid_gaw, invalid_gad. corr_days: düşülen gün, pma_days: postmenstrüel yaş, gün |
height.measured / height.used | Gönderilen boy / ölçüm şekli düzeltmesinden sonra hesaptaki boy |
height.measure_adj | Ölçüm şekli düzeltmesi (yoksa null): gönderilen ve referansın beklediği şekil (l/h), fark cm |
z, p | Z skoru ve persentil |
height.height_age_m, height.ideal_weight | Boy yaşı (ay) ve ideal kilo (kg) |
weight.rel_weight | Relatif ağırlık, % |
wfh | Boya göre kilo |
target | Hedef boy (cm) ve aralığı; z 18 yaş referansına göre |
- Yalnızca gönderdiğiniz ölçümlerin bölümleri gelir; BMI ve boya göre kilo için boy ve kilo birlikte gerekir.
- Referans aralığı dışındaki yaş ya da boy için
zvepnull olur (en uç değere yuvarlanmaz). - Boya göre kilo: WHO 45–120 cm; CDC 24 ay üzeri, 77–121.5 cm. Neyzi'de yoktur.
- Toplu yanıtta
resultsdizisi gelir; her öğedeindex,successveresultya daerror(hatalıysaidde) bulunur. Hatalı ölçüm diğerlerini engellemez ve kotadan düşülmez.
Büyüme eğrileri (isteğe bağlı)
Tekli istekte "graph": true gönderirseniz yanıta result.graphs eklenir: ölçülen ve referans aralığında kalan her ölçüm (height, weight, hc, bmi) için P3, P10, P25, P50, P75, P90, P97 eğrileri ve çocuğun noktası. Kendi grafiğinizi bununla çizebilirsiniz. Toplu istekte grafik dönmez.
"graphs": {
"height": {
"unit": "cm", "x_unit": "month", "x_range": [0, 23.984],
"centiles": [3, 10, 25, 50, 75, 90, 97],
"x": [0, 0.493, …], // yaş (ay)
"p": { "3": [45.6, …], "50": [49.1, …], "97": [52.7, …], … },
"point": [13.142, 76.0] // [hesaptaki yaş (ay), hesaptaki değer]
}
}
Pencere çocuğun yaşına göre seçilir: 2 yaşa kadar 0–24 ay, 5 yaşa kadar 0–60 ay, üstünde 60–240 ay (referans tablosunun kapsadığı kadar). Prematürede düzeltilmiş yaş, boy ölçüm şekli düzeltmesinde düzeltilmiş boy kullanılır.
Örnek: PHP
$anahtar = getenv('PR_PERSENTIL_API_ANAHTARI'); // koda yazmayın
$ch = curl_init('https://pediatrirutinleri.com/api/v1/persentil.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_USERAGENT => 'OrnekKlinik/1.0',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $anahtar, 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'ref' => 'who', 'sex' => 2,
'bday' => '2025-01-10', 'tday' => '2026-10-01',
'height' => 82.0, 'weight' => 11.2,
]),
]);
$yanit = json_decode(curl_exec($ch), true);
$kod = curl_getinfo($ch, CURLINFO_HTTP_CODE);
Örnek: Node.js (18+)
const yanit = await fetch('https://pediatrirutinleri.com/api/v1/persentil.php', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.PR_PERSENTIL_API_ANAHTARI}`,
'Content-Type': 'application/json',
'User-Agent': 'OrnekKlinik/1.0',
},
body: JSON.stringify({ ref: 'cdc', sex: 1, agedays: 1500, height: 101.2, weight: 15.8 }),
});
const veri = await yanit.json();
4. Ziyaretçilerin girdiği form için aracı dosya
Ölçümleri sitenizin ziyaretçileri giriyorsa, tarayıcı API'ye doğrudan bağlanamaz (anahtar sayfa kaynağında görünür ve çalınır). Akış şöyle olmalı:
Ziyaretçinin tarayıcısı → sizin sunucunuz (aracı dosya) → pediatrirutinleri.com API
Önemli: Aracı dosyanız herkese açıktır. Koruma koymazsanız biri onu döngüyle çağırıp sizin günlük kotanızı tüketebilir. En az şu üç önlemi alın: yalnızca kendi sayfanızdan gelen isteği kabul edin, ziyaretçi başına sınır koyun, yalnızca tek ölçüme izin verin. Formunuz herkese açıksa CAPTCHA da eklemenizi öneririz.
Örnek aracı dosya (PHP, APCu ile; APCu yoksa sınırı veritabanı ya da Redis ile tutun):
<?php
// https://sizin-siteniz.com/persentil-hesapla.php
const SITE_KOKENI = 'https://sizin-siteniz.com';
const DAKIKA_SINIRI = 20; // ziyaretçi IP'si başına
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');
if ($_SERVER['REQUEST_METHOD'] !== 'POST') { http_response_code(405); exit; }
// 1) Yalnızca kendi sayfanızdan
if (($_SERVER['HTTP_ORIGIN'] ?? '') !== SITE_KOKENI) { http_response_code(403); exit; }
// 2) Ziyaretçi başına dakikalık sınır
$sayac = 'prp_' . hash('sha256', $_SERVER['REMOTE_ADDR']);
apcu_add($sayac, 0, 60);
if (apcu_inc($sayac) > DAKIKA_SINIRI) { http_response_code(429); exit; }
// 3) Yalnızca tek ölçüm ve bilinen alanlar (toplu "items" geçmez)
$girdi = json_decode(file_get_contents('php://input', false, null, 0, 4096), true);
$izinli = ['ref', 'sex', 'bday', 'tday', 'agedays', 'height', 'weight', 'hc',
'measure', 'gaw', 'gad', 'mheight', 'dheight', 'lang'];
$olcum = is_array($girdi) ? array_intersect_key($girdi, array_flip($izinli)) : [];
// 4) API'ye sunucunuzdan, anahtar ortam değişkeninden
$ch = curl_init('https://pediatrirutinleri.com/api/v1/persentil.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
CURLOPT_USERAGENT => 'SizinSiteniz/1.0',
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('PR_PERSENTIL_API_ANAHTARI'),
'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($olcum ?: new stdClass()),
]);
$yanit = curl_exec($ch);
$kod = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($yanit === false || $kod >= 500) {
http_response_code(502);
echo json_encode(['success' => false, 'error' => ['code' => 'server_error', 'message' => 'Hesap şu an yapılamıyor.']]);
exit;
}
http_response_code($kod);
echo $yanit; // API yanıtı olduğu gibi
Sayfanızdaki JavaScript bu dosyaya fetch('/persentil-hesapla.php', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(olcum)}) ile istek gönderir. Kod yazmak istemiyorsanız gömülü formu kullanın.
5. Hatalar ve sınırlar
{ "success": false, "error": { "code": "invalid_input", "message": "…", "field": "height" }, "request_id": "…" }
code ve field dilden bağımsızdır, programınızda bunlara göre davranın; message lang diline göre Türkçe ya da İngilizcedir.
| HTTP | code | Ne yapmalı |
|---|---|---|
| 400 | invalid_input, invalid_body, too_many_items | Girdiyi düzeltin; field hangi alan olduğunu söyler. |
| 401 | unauthorized | Anahtar yok, hatalı ya da iptal edilmiş. |
| 403 | ip_not_allowed, https_required | İzinli IP'den, HTTPS ile çağırın. |
| 405 / 413 / 415 | method_not_allowed / body_too_large / unsupported_media_type | Yalnızca POST / gövde en çok 64 KB / Content-Type: application/json |
| 429 | rate_limited, quota_exceeded | Retry-After başlığına uyun; kota İstanbul saatiyle gece yarısı yenilenir. |
| 5xx | server_error | Bir süre sonra tekrar deneyin. |
IP başına genel sınır aşıldığında 429 gövdesi {"success": false, "error": "…"} biçimindedir; HTTP koduna göre davranın.
Yanıt başlıkları: X-RateLimit-Limit, X-RateLimit-Remaining (dakikalık istek), X-Quota-Limit, X-Quota-Remaining (günlük ölçüm), X-Request-Id (destek isterken bildirin).
6. Güvenlik ve kişisel veri
- Kişisel veri göndermeyin. Hesap için ad, kimlik numarası ya da dosya numarası gerekmez. Ölçümler saklanmaz ve kayda yazılmaz; yalnızca günlük istek ve ölçüm sayısı tutulur.
- Anahtarı yalnızca sunucuda tutun (ortam değişkeni ya da yapılandırma dosyası). Tarayıcı koduna, mobil uygulamaya ya da herkese açık depoya koymayın.
- Anahtarınızı sunucu IP adreslerinize kısıtlatın; anahtar sızsa bile başka yerden kullanılamaz.
- Anahtar sızdıysa hemen bize bildirin; iptal edip yenisini veririz.
Sonuçlar klinik karar desteği içindir; tanı ve tedavi kararı hekime aittir.