Önbellek
Raporlar sunucuda ana makine adına ve bölüm listesine göre önbelleğe alınır; önbellek süresi içinde aynı bölümleri yeniden istediğinizde aynı gözlem "cached": true ile ve ilk observedAt zamanlarıyla döner. Yukarıdaki Cache-Control başlıkları tarayıcıların ve CDN'in yanıtı kısa süre yeniden kullanmasına da izin verir. Taze sorguyu zorlayan bir parametre yoktur.
CORS
Bu sayfadaki uç noktalar Access-Control-Allow-Origin: * gönderir ve OPTIONS ön kontrol isteklerini yalnızca GET için yanıtlar. Başka bir kaynaktaki sayfadan çağırabilirsiniz. Çerez okumadıkları için kimlik bilgisi de söz konusu olmaz.
Adil kullanım
Her istek kayıt otoritelerine, DNS çözümleyicilerine ve sorgulanan sitenin kendisine gerçek sorgular gönderir. API'yi etkileşimli araçlar, paneller ve bakmak için bir nedeniniz olan alan adlarının ara sıra kontrolü için kullanın. Alan adı listelerini taramayın, sınırları aşmak için adres değiştirmeyin, çıktıyı yeniden satmayın. Kabul edilebilir kullanım politikası API trafiği için de sitedeki gibi geçerlidir.
Giden webhook'lar
Giriş yapmış üyeler izleme uyarılarını, süre hatırlatmalarını ve pazar yeri bildirimlerini kendilerine ait bir adrese gönderebilir: bir Slack gelen webhook'u ya da genel bir https uç noktası (çalışma alanı → Ayarlar → Bildirim kanalları). Bu bölüm alıcının ne aldığını anlatır. Yalnızca giden yöndedir: OrbitProbe bu adreslerde istek kabul etmez ve gelen bir API yoktur.
Alıcılar genel bir sunucuda https olmalıdır (varsayılan port, kimlik bilgisi yok; özel, yerel ve ayrılmış sunucu adları reddedilir, sunucu adı gönderim anında yeniden çözümlenip denetlenir). Yönlendirmeler izlenmez. Alıcı 2xx yanıt verdiğinde iletim tamamlanmış sayılır; art arda beş başarısız iletimden sonra webhook kapatılır ve sahibi çalışma alanında bir bildirim görür.
İstek
| Ad | Açıklama |
|---|---|
| POST | JSON gövde, Content-Type: application/json; charset=utf-8, User-Agent: OrbitProbe-Webhook/1.0 |
| X-OrbitProbe-Event | Tür (aşağıya bakın). |
| X-OrbitProbe-Delivery | İletim kimliği (ntf_<sayı>). Yeniden denemede aynı kalır; böylece yinelenenleri ayıklayabilirsiniz. |
| X-OrbitProbe-Signature | Yalnızca genel uç noktalarda: t=<unix saniye>,v1=<"<t>.<ham gövde>" üzerinden, Ayarlar'da gösterilen imza anahtarıyla hesaplanan HMAC-SHA256, hex>. |
Gövde (genel uç noktalar)
| Ad | Açıklama |
|---|---|
| id | İletim kimliği; X-OrbitProbe-Delivery ile aynı. |
| kind | Aşağıdaki türlerden biri. |
| category | watch, expiry, market veya test. |
| title, text | Hesabın dilinde bildirim metni: push bildirimindeki ifadenin aynısı. Sayımlar "M çözümleyiciden N'i" biçimindedir, asla yüzde değildir. |
| url | Çalışma alanında bakılacak yer. |
| createdAt | Olayın kuyruğa alındığı an (ISO 8601, UTC). |
| account | Alıcının hesap kimliği; tek bir alıcı birden çok hesaba hizmet edebilsin diye. |
| data | Olayın kayıtlı ham hali: alan adı, sayımlar, ilan kimliği, tam sayı alt birim olarak tutar ve para birimi vb. Alanlar türe göre değişir; eksik olan bir alan ölçülmemiş demektir, asla "hayır" demek değildir. |
{
"id": "ntf_1042",
"kind": "watch-changed",
"category": "watch",
"title": "Watch: unexpected change",
"text": "example.com TXT: 9 of 12 resolvers return values that differ from the guarded baseline.",
"url": "https://www.orbitprobe.com/app/watch/00000000-0000-4000-8000-000000000000",
"createdAt": "2026-01-01T00:00:00.000Z",
"account": "00000000-0000-4000-8000-0000000000aa",
"data": {
"domain": "example.com",
"kind": "dns-change",
"record_type": "TXT",
"name": "example.com",
"matched": 3,
"total": 12,
"failed": 0,
"differing": 9,
"watch_id": "00000000-0000-4000-8000-000000000000",
"event_id": 77
}
}Gövde (Slack)
Slack gelen webhook'ları yalnızca {"text": "…"} alır: başlık, metin ve adres üç satırda; Block Kit ya da ek yoktur. Böylece mesaj her Slack istemcisinde ve Mattermost, Rocket.Chat gibi Slack uyumlu alıcılarda görüntülenir.
{
"text": "*Watch: unexpected change*\nexample.com TXT: 9 of 12 resolvers return values that differ from the guarded baseline.\nhttps://www.orbitprobe.com/app/watch/…"
}İmzayı doğrulama
"<t>.<ham gövde>" üzerinden anahtarınızla HMAC'i yeniden hesaplayın, sabit zamanlı karşılaştırın ve beş dakikadan eski zaman damgalarını reddedin. Hash almadan önce JSON'u ayrıştırıp yeniden serileştirmeyin: alındığı haliyle baytları imzalayın.
// Node.js receiver: verify X-OrbitProbe-Signature before trusting the body
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verify(secret, rawBody, header, nowSeconds = Math.floor(Date.now() / 1000)) {
const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header ?? '');
if (!m || Math.abs(nowSeconds - Number(m[1])) > 300) return false;
const expected = createHmac('sha256', secret).update(`${m[1]}.${rawBody}`).digest('hex');
return timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(m[2], 'hex'));
}Türler
watch-changed, watch-target, watch-failed, watch-recovered, watch-partial · expiry · offer-received, offer-countered, offer-accepted, offer-rejected, offer-withdrawn, offer-expired, listing-submitted, listing-approved, listing-paused, listing-removed, agreement-cancelled · test ("Test gönder" düğmesi).
Sınırlar
Hesap başına en fazla 5 webhook ve saatte 20 gönderim; sonrasında olaylar uygulama içi gelen kutusuna ve e-postaya yine ulaşır ama gönderilmez. İletimler beş dakikalık görevin sonraki çalışmalarında en fazla beş kez yeniden denenir. "offer-accepted" olayı yalnızca bir anlaşmayı kaydeder: ödeme, escrow ya da devir anlamına gelmez.
OpenAPI tanımı
Bu uç noktaların makinece okunabilir OpenAPI 3.1 belgesi aynı koddan üretilir: /api/openapi.json