Developer dokümanı v1 Durum: spesifikasyon · sandbox anahtarları F1 ile açılıyor

Mety Signal API

Sinyal üretiyorsun, biz yürütüyoruz. Algonu kaydediyorsun, sinyallerini tek uçtan gönderiyorsun; Mety onları kendi risk ve kasa yönetimiyle çalıştırıyor, karnesini tutuyor ve iyi çalışan algoyu otonom filoya sokuyor. Algonu çalıştıran her oturumun tokenlarının %60'ı sana yazılır.

Base URL · https://signal.mety.dev/v1 HMAC-SHA256 imza Idempotent Geçmiş veri içe aktarma Doküman · signal.mety.dev
01

Kavramlar

Dört kavram var; hepsi bu sırayla bağlanır.

Provider — sen

API anahtarının sahibi. Bir provider birden çok algo yayınlayabilir. Kimliğin anahtardan gelir; gövdede provider göndermene gerek yok, gönderirsen yok sayılır.

Algo — ürünün

Kullanıcının panelde gördüğü isim (porty-ai, acme-trend-ai gibi). Skor, ghost karnesi, saat matrisi ve kazanç paylaşımı algo bazında tutulur.

Signal — tek karar

Bir coin için giriş fikri: yön, giriş (tek fiyat ya da bölge), stop, hedefler. Durumu vardır; aynı signal_id ile güncellenir.

Session — kullanıcının botu

Kullanıcı ya tek algo seçer ya da otonom çekirdeğe bırakır. Oturum senin sinyallerinle çalışır ve token harcar; bu tokenın %60'ı sana yazılır.

algo kaydı sinyal gönderimi gölge dönemi (ölçüm) panelde / otonomda canlı token payı
02

Hızlı başlangıç

Üç istek: algoyu kaydet, sandbox'ta bir sinyal gönder, karneyi oku.

# 1) Algonu kaydet (bir kez)
curl -X POST https://signal.mety.dev/v1/algos \
  -H "X-Mety-Key: pk_test_..." -H "Content-Type: application/json" \
  -d '{"algo_id":"acme-trend-ai","name":"Acme Trend","timeframe":"1h",
       "description":{"tr":"Donchian kırılımı + hacim teyidi","en":"Donchian breakout + volume"}}'

# 2) Sinyal gönder (imzalı)
BODY='{"algo_id":"acme-trend-ai","signal_id":"BTC-LONG-20260923-01","pair":"BTCUSDT",
  "side":"LONG","issued_at":"2026-09-23T17:55:00Z","entry":{"type":"ZONE","low":62450,"high":62780},
  "sl":61720,"tp":[{"price":63150,"close_pct":40},{"price":63850,"close_pct":30},
  {"price":64900,"close_pct":20},{"price":66200,"close_pct":10}],
  "leverage":15,"margin":"ISOLATED","be_after":"TP1","valid_until":"2026-09-24T00:00:00Z"}'
TS=$(date +%s)
SIG=$(printf "%s.%s" "$TS" "$BODY" | openssl dgst -sha256 -hmac "$METY_SECRET" -hex | awk '{print $2}')
curl -X POST https://signal.mety.dev/v1/signals \
  -H "X-Mety-Key: pk_test_..." -H "X-Mety-Timestamp: $TS" -H "X-Mety-Signature: $SIG" \
  -H "Content-Type: application/json" -d "$BODY"

# 3) Karneni oku
curl https://signal.mety.dev/v1/algos/acme-trend-ai/score -H "X-Mety-Key: pk_test_..."
Python
import hmac, hashlib, json, time, requests

KEY, SECRET = "pk_live_...", "sk_live_..."
body = json.dumps({
  "algo_id": "acme-trend-ai",
  "signal_id": "BTC-LONG-20260923-01",
  "pair": "BTCUSDT", "side": "LONG",
  "issued_at": "2026-09-23T17:55:00Z",
  "entry": {"type": "ZONE", "low": 62450, "high": 62780},
  "sl": 61720, "tp": [{"price": 63150, "close_pct": 40}],
}, separators=(",", ":"))
ts  = str(int(time.time()))
sig = hmac.new(SECRET.encode(), f"{ts}.{body}".encode(),
               hashlib.sha256).hexdigest()
r = requests.post("https://signal.mety.dev/v1/signals",
  data=body, headers={"X-Mety-Key": KEY, "X-Mety-Timestamp": ts,
    "X-Mety-Signature": sig, "Content-Type": "application/json"})
print(r.status_code, r.json())
Node
import crypto from "node:crypto";

const KEY = "pk_live_...", SECRET = "sk_live_...";
const body = JSON.stringify({
  algo_id: "acme-trend-ai",
  signal_id: "BTC-LONG-20260923-01",
  pair: "BTCUSDT", side: "LONG",
  issued_at: new Date().toISOString(),
  entry: { type: "MARKET" }, sl: 61720,
  tp: [{ price: 63150 }],
});
const ts  = Math.floor(Date.now() / 1000).toString();
const sig = crypto.createHmac("sha256", SECRET)
  .update(`${ts}.${body}`).digest("hex");
const res = await fetch(
  "https://signal.mety.dev/v1/signals",
  { method: "POST", body, headers: {
    "X-Mety-Key": KEY, "X-Mety-Timestamp": ts,
    "X-Mety-Signature": sig,
    "Content-Type": "application/json" } });
console.log(res.status, await res.json());
03

Kimlik ve imza

Anahtar kimliği, imza bütünlüğü sağlar. İkisi de zorunludur; imzasız istek 401 döner.

X-Mety-Keypk_test_… (sandbox) veya pk_live_… (canlı). Anahtar sahibi = provider.
X-Mety-TimestampUnix saniye. Sunucu saatinden ±300 sn dışındaki istek reddedilir (replay koruması).
X-Mety-Signaturehex(HMAC_SHA256(secret, timestamp + "." + ham_gövde)). Gövde bayt bayt imzalanır — yeniden serileştirme imzayı bozar.
Content-Typeapplication/json ya da text/plain (düz metin sinyal).
  • Sandbox önce. pk_test_ anahtarı aynı doğrulamadan geçer, hiçbir şey yürütülmez, anında geri bildirim verir. Uyum testini geçmeden canlı anahtar verilmez.
  • Anahtar döndürme. Panelden ikinci bir anahtar üretip eskisini 24 saat sonra kapatabilirsin; geçiş süresince ikisi de geçerlidir.
  • !
    Secret bizde saklanmaz — yalnız türevi tutulur. Kaybedersen yenisini üretirsin, geri okunamaz.
04

Algo kaydı

Sinyal gönderebilmen için önce algo kaydı gerekir. Bir algo = bir karne = bir kazanç hattı.

POST/v1/algosalgoyu kaydet
{
  "algo_id": "acme-trend-ai",        // ^[a-z0-9-]{3,32}$ · sonradan değişmez
  "name": "Acme Trend",             // panelde görünen ad
  "timeframe": "1h",                 // ana çalışma periyodun (bilgi amaçlı)
  "markets": ["BINANCE:FUTURES"],  // bu algonun sinyal ürettiği borsalar
  "max_risk_level": 4,                // 1-5: kullanıcı bunun üstünde risk seçemez
  "description": {"tr": "Donchian kırılımı + hacim teyidi",
                   "en": "Donchian breakout + volume confirmation"},
  "contact": "dev@acme.io"
}

Yanıt 201 ile algoyu ve durumunu döndürür: "status":"shadow" — gölge dönemi başlamıştır. algo_id mevcut bir algoyla (bizimkiler dahil) çakışırsa 409 alırsın.

GET/v1/algos/{algo_id}/scorekarne
{
  "algo_id": "acme-trend-ai", "status": "shadow",        // shadow | panel | paused
  "shadow_days": 12, "signals": 318, "executed": 276,
  "score_total": 2840, "provisional": true,          // veri yetersizken true
  "expectancy_pct": 0.041, "win_rate": 0.38, "max_dd_pct": 6.2,
  "oos": {"window": "[now-60d, now-30d]", "expectancy_pct": 0.037, "t_stat": 2.4},
  "hours_utc": {"best": [13,14,15,20], "worst": [2,3]},
  "live_eligible": false, "blockers": ["gölge dönemi 30 güne tamamlanmadı"]
}
05

Sinyal gönderme

Tek uç, üç kullanım: yeni sinyal, aynı signal_id ile güncelleme, toplu gönderim.

POST/v1/signalsyeni sinyal · güncelleme

Zorunlu alanlar: algo_id, signal_id, pair, side, issued_at. Gerisi opsiyoneldir — eksik alanlar kullanıcının bot ayarından tamamlanır.

// 202 Accepted
{
  "status": "accepted",
  "signal": {"id": "sig_01J8Z…", "signal_id": "BTC-LONG-20260923-01",
             "pair": "BTCUSDT", "side": "LONG", "state": "validated"},
  "normalized": {"entry": {"type":"ZONE","low":62450,"high":62780},
                  "tp": [{"price":63150,"close_pct":40}, "…"]},
  "warnings": [],
  "echo_unknown": ["my_custom_field"]   // tanımadık ama sakladık
}

Idempotency: anahtar (provider, algo_id, signal_id). Aynı gövde ikinci kez gelirse 200 ile aynı kayıt döner (çift kayıt yok). Gövde değişmişse güncelleme sayılır ve yeni bir revizyon yazılır.

PATCH/v1/signals/{signal_id}durum · stop · hedef
{ "status": "CANCELLED" }                      // bekleyen girişler iptal
{ "sl": 62100 }                                // stop taşı
{ "tp": [{"price": 64000, "close_pct": 100}] }   // hedefleri yeniden kur

Kapanmış bir sinyale giriş güncellemesi 409 ile reddedilir. Açık pozisyon varken CANCELLED göndermek pozisyonu kapatır; yalnız bekleyen emirleri düşürmek istiyorsan {"status":"EXPIRED"} kullan.

POST/v1/signals/batch≤ 500 sinyal

Tek istekte çok sinyal. Yanıt her satır için ayrı sonuç döndürür; bir satırın hatası diğerlerini düşürmez. Geçmiş veri aktarımı da bu uçtan yapılır (bkz. bölüm 09).

GET/v1/signals/{signal_id}bizdeki hâli

Kanonik kayıt + yürütme özeti: kaç oturum aldı, ortalama giriş, gerçekleşen sonuç, kapanış nedeni dağılımı.

06

Alan referansı

Kanonik model. Zorunlu beş alanın dışında hiçbir şey seni bağlamaz; gönderdiğin her ek alan yürütmeyi iyileştirir.

AlanTipDurumAçıklama
algo_idstringzorunluKayıtlı algon. Bir provider birden çok algo yayınlayabilir.
signal_idstringzorunluAlgo içinde tekil. Aynı id = güncelleme.
pairstringzorunluBTCUSDT · BTC/USDT · BTC-USDT · BTC (quote yoksa USDT).
sideenumzorunluLONG / SHORT (BUY, SELL, L, S kabul).
issued_attimezorunluISO-8601, unix sn veya ms. Canlı puanlamaya yalnız 60 sn içinde ulaşan sinyal girer; geç gelen saklanır ama puana girmez.
exchange · marketenumzorunluSinyalin borsası. BINANCE + FUTURES. Gövdede yoksa bu ikisi varsayılır ve yanıtta uyarı döner. Desteklenmeyen borsa (ör. OKX) kabul edilir ve saklanır ama şimdilik değerlendirilmez; destek açıldığında geriye dönük okunur. Güncel liste: GET /v1/venues.
entry.typeenumopsiyonelMARKET · LIMIT · ZONE. Verilmezse alanlardan türetilir.
entry.price / low / highnumberopsiyonelTek fiyat ya da bölge. "62450-62780" ve [62450,62780] da kabul.
slnumberopsiyonelStop. Vermezsen risk seviyesinin ATR tabanlı stopu kullanılır — stopsuz pozisyon asla açılmaz.
tp[]arrayopsiyonel[{price, close_pct}] · [63150,63850] · TP1..TPn + TP1_CLOSE…. Oran verilmezse eşit bölünür.
leverage · marginnumber · enumopsiyonelİstek olarak alınır; kullanıcının paket tavanı ve borsa sınırı her zaman üsttedir.
be_afterenumopsiyonelTP1 / TP2 sonrası stop fee dahil başabaşa çekilir.
valid_until · expires_intime · duropsiyonelSüre dolunca bekleyen girişler iptal; açık pozisyon kendi SL/TP'siyle devam eder.
confidence0–1opsiyonelBoyutlandırmaya girdi olur (düşük güven → küçük pozisyon). 72 gönderirsen 0.72 okunur.
risk_pct · timeframe · strategykarışıkopsiyonelSkorlama kırılımı: aynı algonun farklı setuplarını ayrı ayrı ölçeriz.
(diğer)anysaklanırTanımadığımız her alan ham hâliyle saklanır ve yanıtta echo_unknown ile bildirilir.
07

Takma adlar ve düz metin

Mevcut sinyal formatını değiştirmen gerekmiyor. Alan adların tanıdıksa çevirisini biz yaparız; mesaj metnini olduğu gibi de gönderebilirsin.

KanonikKabul edilen adlarTolerans
pairsymbol · ticker · coin · instrumentbüyük/küçük harf, / - _, .P / PERP son ekleri
sidedirection · position · action · typeBUY/SELL, L/S, AL/SAT
entryentry_price · entry_zone · price · buy_between"62450-62780", [62450,62780], $62,450
tp[]targets · take_profit · tps · TP1..TPndizi, nesne dizisi, numaralı alanlar, virgüllü liste
slstop · stop_loss · stoploss · invalidationfiyat
leveragelev · x15, "15x", "cross 15" (margin da okunur)
valid_untilexpiry · expires_at · ttl · valid_forISO, unix, "24h", "2d"
issued_attime · timestamp · created_at · tsISO, unix sn/ms, "2026-09-23 17:55"
Düz metin gönderimi · text/plain
SIGNAL_ID: BTC-LONG-20260923-01
PAIR: BTCUSDT
SIDE: LONG
LEVERAGE: 15
ENTRY_LOW: 62450
ENTRY_HIGH: 62780
TP1: 63150   TP1_CLOSE: 40
TP2: 63850   TP2_CLOSE: 30
SL: 61720
MOVE_SL_TO_BE_AFTER: TP1
VALID_UNTIL: 2026-09-24T00:00:00Z
TIME: 2026-09-23T17:55:00Z
Ne olur
  • 1
    Satırlar ANAHTAR: değer olarak okunur, takma adlar çevrilir.
  • 2
    Çözülemeyen satır atılmaz: ham hâliyle saklanır, yanıt "partial": true döner.
  • 3
    algo_id metinde yoksa query ile verilir: ?algo_id=acme-trend-ai.
08

Sinyalin ömrü

Sinyal tek atımlık mesaj değil, durumu olan bir kayıttır. Her geçiş ayrı satıra yazılır; karnen bu defterden hesaplanır.

alındıdoğrulandı giriş bekliyorpozisyon açık TP1..TPnkapandı
yan çıkışlar reddedildisüresi dolduiptal stopyürütülmedi

"Yürütülmedi" senin hatan değildir: coin o an başka bir motorda kilitli olabilir, kullanıcının kasası dolu olabilir, paket tavanı engelleyebilir. Bu sinyaller karnende nötrdür — ne ödül ne ceza.

09

Geçmiş veri aktarımı

Yeni algonun karnesi sıfırdan başlamak zorunda değil. Geçmiş sinyallerini mühürlü olarak içe aktarabilirsin; skor ve saat matrisi bunlardan hesaplanır.

POST/v1/signals/batch?historical=1≤ 730 gün geriye
{ "algo_id": "acme-trend-ai",
  "seal": true,                      // mühür: bu aralık bir daha değiştirilemez
  "range": {"from": "2025-09-23T00:00:00Z", "to": "2026-09-23T00:00:00Z"},
  "signals": [ "… kanonik sinyaller, issued_at geçmişte …" ] }

Aktarılan sinyaller asla yürütülmez; motorumuzda kendi kline geçmişimize karşı yeniden oynatılır (aynı fee, aynı slippage, aynı kapılar). Sonuç senin iddian değil, bizim ölçümümüz olur.

  • !
    Mühür kuralı. Bir aralık bir kez aktarılır ve kapanır. Sonradan sinyal eklemek, silmek ya da düzeltmek mümkün değildir — kaybedenleri ayıklayarak karne şişirmenin önü budur.
  • Saat matrisi son 3 ayı okur. Otonom çekirdek "şu saatte hangi algo" derken yakın dönemin saat başarısına bakar; daha eski veri uzun pencere skorlarına (180g / 365g) girer.
  • Geçmiş tek başına yeterli değildir. Canlıya çıkış için ileriye dönük gölge dönemi de gerekir (bölüm 11). Geçmiş veri, gölge süresini kısaltmaz; güveni artırır.
  • Etiketlenir. Kullanıcıya gösterilen karnede geçmiş-aktarım ile canlı ölçüm ayrı satırlarda görünür. Karıştırmayız.
10

Yürütme kuralları

Sinyal niyeti söyler; boyut, kaldıraç tavanı, eşzamanlı pozisyon ve kasa koruması bizde kalır. Bu ayrımı bilerek tasarla.

GönderdiğinBizim yaptığımız
entry ZONEbölgeye kademeli maker limit (varsayılan 2 kademe); dolmayan kademe süre sonunda iptal
tp[] + close_pctkademeli kâr-al; toplam >100 ise oranlanır, tek TP'de 1R kademesi eklenir
be_afterstop fee dahil başabaşa çekilir (çıplak fiyat değil)
leveragemin(istek, kullanıcı paketi, canlı 50x, sembol braketi)
sl yokrisk seviyesinin ATR/swing stopu; stopsuz pozisyon yok
aynı coine ikinci sinyalsembol tekeli: bir coinin aynı anda tek sahibi olur, ikincisi "yürütülmedi" yazılır
yüksek frekansfee-edge kapısı: işlem başına brüt beklenti, fee'nin en az 3 katı olmalı — scalper tasarımlar bu rejimde elenir

Kullanıcının günlük zarar kesicisi, drawdown yarı-boyutu ve sessiz-saat kapıları senin sinyallerinde de çalışır. Karnende bu yüzden "gönderilen" ile "yürütülen" sayısı farklı olur — normaldir.

10b

Puanı dürüst tutan kurallar

Puan yalnız gerçekten iyi sinyalle kazanılabilsin diye şunlar zorunlu — hepsi otomatik uygulanır.

KuralNe yapar
geç sinyalBize 60 sn içinde ulaşmayan sinyal puana girmez (geçmişe sinyal yazılamaz).
sonradan düzeltmeİlk fill'den sonra stop yalnız girişe doğru taşınabilir; uzağa taşıma 409. Kapanan sinyal değişmez.
sıklıkAlgo başına günde ≤200 sinyal, sembol başına saatte ≤4, aynı (pair, side) 30 dk'da bir. Aşım 429.
çift yönAynı sembolde aynı anda LONG + SHORT puanlanmaz — ikisi de nötrlenir.
fee kapısıHedef, round-trip fee'nin 3 katından yakınsa o sinyalin puan ağırlığı sıfırdır.
likiditeDüşük hacimli paritelerde puan ağırlığı yarıya iner.
klon akışBaşka bir algonun sinyal akışını %80+ tekrarlayan algo terfi edemez.
tek işlemEn iyi %5 işlem çıkarıldığında beklentin negatife düşüyorsa terfi yok (jackpot koruması).
kendi kendine kazançKendi hesabının oturumları kazanç payına girmez.
11

Skor ve canlıya çıkış

Karne tek ölçüttür; "bence iyi" geçmez. Kendi algolarımız da bu kapıdan geçer, ayrıcalık yok.

Ölçü = expectancy

İşlem başına fee-net beklenti. Kazanma oranı tek başına anlamsızdır (R:R ile %69 WR bile başabaş olabilir).

Disjoint OOS

Skorlanan pencereyle örtüşmeyen bağımsız bir pencerede de pozitif olmalısın. Yakın dönem serabı bu kapıda elenir.

Gölge dönemi

En az 30 gün ve anlamlı işlem sayısı. Ayda ~40 pozisyon üreten bir algo tek aylık "+%10" ile terfi edemez.

İlk 3 çıtası

Skorun, o anki skorboardda ilk 3 algonun en düşüğünün altındaysa panele çıkmazsın; ghost'ta ölçülmeye devam edersin.

Otonom seçimi

Çekirdek "şu saatte hangi kaynak" diye sorar; saat matrisin ve skorun iyiyse filoya girersin. Kullanıcı istersen seni doğrudan da seçebilir.

Düşme

Karne bozulursa algo paused olur: sinyal almaya devam ederiz, yeni oturum açılmaz. Toparlarsan geri döner.

12

Kazanç paylaşımı

Algonu çalıştıran oturumların harcadığı tokenın %60'ı sana yazılır. Ödeme aylık kesinleşir.

Atıf

Her token hareketi, oturumu besleyen algoya etiketlenir. Otonom çekirdek gün içinde algo değiştirirse pay, o dilimde hangi algo çalıştıysa ona yazılır.

Defter

GET /v1/earnings — gün gün token, oturum sayısı, kesinleşen ve bekleyen tutar. Kapanmayan ay "bekliyor" görünür.

Ödeme

Ay kapanır, tutar kesinleşir, asgari eşiğin altındaysa bir sonraki aya devreder. Ödeme bilgisi panelden girilir.

Kötüye kullanım

Kendi hesabınla token yakarak pay üretmek (self-dealing), aynı coine dakikalık zıt sinyal yağdırmak ve geçmişe dönük düzeltme paydan düşülür. Sonuçlar bizim defterimizden okunur.

// GET /v1/earnings?month=2026-09
{ "month": "2026-09", "status": "open",
  "tokens_attributed": 18420, "share_pct": 60, "tokens_earned": 11052,
  "sessions": 214, "users": 63,
  "by_algo": [{"algo_id":"acme-trend-ai","tokens_earned":11052}],
  "payout": {"state":"pending_month_close", "eta":"2026-10-05"} }
13

Hatalar ve limitler

Hata mesajı ne yapacağını söyler: hangi alan, neden, hangi adlar kabul ediliyor.

// 422 Unprocessable
{ "error": "validation_failed",
  "details": [
    {"field":"issued_at", "message":"zorunlu — ISO-8601, unix sn veya ms",
     "accepts":["created_at","date","timestamp","ts"]},
    {"field":"sl", "message":"LONG sinyalde stop girişin yanlış tarafında (giriş 62615, sl 63000)"}
  ] }
KodAnlamıNe yapmalı
200 / 201 / 202kabul (sırasıyla: aynı kayıt · oluşturuldu · alındı)
400gövde okunamadıJSON ya da text/plain gönder
401anahtar/imza geçersizimzayı ham gövde üzerinden üret
403algo sana ait değil / askıdakarneni kontrol et
409çakışma (algo adı, kapanmış sinyale giriş, mühürlü aralık)farklı id / yeni sinyal
422doğrulamadetails alanına bak
429hız limitiRetry-After kadar bekle
Hız limiti600 istek/dk (anahtar başına), saniyelik burst 60. Batch tek istek sayılır.
Gövde boyutuTek sinyal 32 KB · batch 4 MB.
Saat toleransı±300 sn (imza zaman damgası).
SürümAlan eklemek kırıcı değildir; alan çıkarmak yeni sürüm gerektirir. v1 en az 6 ay yaşar.
14

Webhook'lar

Sinyalinin başına ne geldiğini öğrenmek için bizi sorgulamana gerek yok.

OlayNe zamanGövde
signal.executedilk oturum pozisyonu açtısinyal + oturum sayısı + ortalama giriş
signal.closedson pozisyon kapandıfee-net sonuç, kapanış nedeni dağılımı
signal.rejecteddoğrulama/yürütme reddineden + alan
algo.status_changedshadow → panel → pausedeski/yeni durum + gerekçe
payout.createday kapandıtoken, tutar, dönem

Her webhook X-Mety-Signature taşır (aynı HMAC şeması). 2xx dönmeyen uç 5 kez, artan aralıkla yeniden denenir.

15

Yayına çıkış kontrol listesi

Sandbox'tan canlıya geçmeden önce bunların hepsi yeşil olmalı.

  • 1
    İmza doğru. Ham gövde üzerinden HMAC; yeniden serileştirme yok.
  • 2
    Idempotency çalışıyor. Aynı signal_id'yi iki kez göndermek çift kayıt üretmiyor.
  • 3
    Güncelleme akışı var. Stop taşıma ve iptal PATCH ile gönderiliyor.
  • 4
    Zaman doğru. issued_at gerçek üretim anı; sunucu saatinle senkronsun.
  • 5
    Stop her sinyalde var (ya da bilinçli olarak bize bırakılıyor).
  • 6
    Fee matematiği tutuyor. İşlem başına brüt beklentin round-trip fee'nin en az 3 katı.
  • 7
    Geçmiş veri mühürlendi (aktaracaksan) ve tek seferde gönderildi.
  • 8
    Webhook ucun 2xx dönüyor ve imzayı doğruluyor.

Takıldığın yerde dev@mety.dev — entegrasyon sorularına aynı gün dönüyoruz.