Swapnoir
TR

Herkese açık API · v1 · Ücretsiz

Swapnoir API

Cüzdanınız, botunuz veya web siteniz için canlı kurlar, desteklenen para birimleri ve sipariş takibi. Salt okunur; API anahtarı yok, hesap yok.

Temel URL
https://swapnoir.com/api/v1
Kimlik doğrulama
Yok
Biçim
JSON, UTF-8
Hatalar
RFC 9457

Genel bakış

Swapnoir API, uygulamanıza swapnoir.com takas hizmetinin kullandığı canlı verilerin aynısını sunar. HTTPS üzerinden çalışan, üç uç noktalı küçük bir REST API’dir; JSON döndürür ve Postman, Insomnia, Scalar veya bir kod oluşturucuya yükleyebileceğiniz bir OpenAPI 3.1 dosyasında tanımlanmıştır.

Canlı kurları gösterin

Fiyat bileşenleri, hesaplayıcılar ve botlar. Tahminlere ödeme için gereken tüm ücretler zaten dahildir.

Kullanıcıları bir takasa yönlendirin

Uygulamanızdan tek bir bağlantıyla swapnoir.com üzerinde önceden doldurulmuş bir takas açın.

Siparişleri takip edin

Bir takası sipariş numarasıyla takip edin ve tamamlandığında kullanıcılarınızı bilgilendirin.

Hızlı başlangıç

Kayıt gerekmez. Bunları bir terminalde çalıştırın; her biri tek başına çalışır.

  1. Takas edilebilecekleri listeleyin. Diğer çağrılarda her para biriminin id değerini kullanın.
    curl "https://swapnoir.com/api/v1/currencies"
  2. Canlı tahmin alın. Ücretler düşüldükten sonra 0.01 BTC ile kaç XMR alınır?
    curl "https://swapnoir.com/api/v1/estimate?from=BTC&to=XMR&amount=0.01"
  3. Kullanıcınızı takasa yönlendirin ve takibini yapın. Kullanıcı işlemi swapnoir.com üzerinde tamamlar ve bir sipariş sayfası alır. Sayfadaki sipariş numarasıyla siparişi takip edebilirsiniz.
    curl "https://swapnoir.com/api/v1/orders/K7M2QX9PRT4B"

Canlı deneyin

GET /api/v1/estimate?from=BTC&to=XMR&amount=0.01&rate=float

İstekler ve veriler

Temel URLhttps://swapnoir.com/api/v1. Yalnızca HTTPS.
YöntemlerTüm uç noktalar GET yöntemini kullanır. Parametreler sorgu dizesinde veya yolda yer alır.
Yanıtlarapplication/json, UTF-8. Hatalarda application/problem+json kullanılır.
TutarlarHassasiyet kaybolmasın diye "0.01" gibi ondalık dizeler. Tutarları nokta ile ve en fazla para biriminin decimals değeri kadar basamakla gönderin.
Para birimi kimlikleriPara birimi ve ağ birlikte, örneğin BTC, USDT-TRC20. İsteklerde büyük/küçük harf duyarlı değildir; yanıtlarda her zaman büyük harftir.
ZamanlarUTC cinsinden ISO 8601, örneğin 2026-10-05T12:00:00.000Z.
TarayıcılarCORS açıktır (Access-Control-Allow-Origin: *), bu nedenle API’yi bir web sayfasından çağırabilirsiniz. Çerez kullanılmaz.
Torhttp://swapnoqyyp3mfh3hoypzmvpnau7gymt7c32tybx2qew3s7sw7bzz7aqd.onion/api/v1 adresinde Tor üzerinden de aynı uç noktalar ve limitlerle kullanılabilir.
SürümlemeSürüm yolda yer alır. v1 içinde yalnızca ekleme yaparız: yeni uç noktalar, yeni isteğe bağlı parametreler, yeni yanıt alanları ve yeni para birimleri; bu nedenle tanımadığınız alanları yok sayın. Bir entegrasyonu bozabilecek her değişiklik yeni bir sürüm olarak yayımlanır ve v1 onunla birlikte çalışmaya devam eder.

Kimlik doğrulama

Yok. API anahtarı, hesap veya token yoktur ve istekler hiç kimseyle ilişkilendirilmez. API’ye asla kimlik bilgisi, kurtarma ifadesi veya özel anahtar göndermeyin; API bunları asla istemez.

İstek limitleri

Limitler, kayan bir dakikalık pencerede bağlantı başına sayılır.

Uç noktaDakika başına istek
GET /currencies60
GET /estimate90
GET /orders/{id}30

Her yanıt standart RateLimit-Policy (örneğin 90;w=60) ve RateLimit (örneğin limit=90, remaining=89, reset=60) başlıklarını içerir. Limit aşıldığında, saniye cinsinden bir Retry-After başlığıyla birlikte 429 yanıtı alırsınız.

  • /currencies yanıtını en az 5 dakika önbelleğe alın; nadiren değişir.
  • Kullanıcı bir tutar yazarken, tahmin istemeden önce son tuş vuruşundan sonra yaklaşık yarım saniye bekleyin.
  • Bir siparişi en fazla 10 saniyede bir sorgulayın ve final değeri true olduğunda durun.

Hatalar

Hatalar standart RFC 9457 problem details biçimini kullanır. Önce HTTP durum kodunu kontrol edin, ardından hiç değişmeyen code değerine göre işlem yapın. detail, kullanıcınıza gösterebileceğiniz sade İngilizce bir mesajdır; type ise aşağıdaki ilgili satıra bağlantı verir.

422 Örnek
{
  "type": "https://swapnoir.com/api#error-amount_too_small",
  "title": "Amount below minimum",
  "status": 422,
  "detail": "The minimum for this pair is 0.00005799 BTC.",
  "code": "amount_too_small",
  "min_amount": "0.00005799"
}
KodHTTPAnlamı
invalid_parameter400Bir sorgu parametresi eksik veya hatalı biçimlendirilmiş. Hangisi olduğunu param belirtir.
same_currency400from ve to aynı para birimi.
receive_not_supported400to para birimi yalnızca gönderim içindir (Lightning).
amount_too_small422Tutar bu çiftin minimumunun altında. Minimum değer min_amount alanındadır.
pair_not_supported422Bu para birimi ve ağ çifti sunulmuyor.
pair_unavailable503Bu çift için şu anda kur yok. Daha sonra tekrar deneyin veya başka bir tutar deneyin.
not_found404Bu numarayla bir sipariş yok ya da sipariş silinmiş.
rate_limited429İstek limitine ulaştınız. Retry-After içindeki saniye kadar bekleyin.
internal_error500Bizim tarafımızda bir sorun oluştu. Daha sonra tekrar deneyin.

Referans

Para birimlerini listele

GET/api/v1/currencies

Swapnoir’ın desteklediği tüm para birimleri ve ağlar. Başka bir ağdaki token ayrı bir para birimidir, örneğin USDT-TRC20 ve USDT-ERC20. Liste nadiren değişir; birkaç dakika önbelleğe alın.

Örnekte para birimlerinden üçü gösteriliyor. Aşağıdaki yanıt alanları her bir para birimi içindir.

İstek

curl "https://swapnoir.com/api/v1/currencies"
const res = await fetch("https://swapnoir.com/api/v1/currencies");
const { currencies } = await res.json();

// Currencies a user can receive
const receivable = currencies.filter((c) => c.receive);
import requests

r = requests.get("https://swapnoir.com/api/v1/currencies", timeout=10)
r.raise_for_status()
currencies = r.json()["currencies"]

Yanıt

200 OK
{
  "currencies": [
    {
      "id": "BTC",
      "ticker": "BTC",
      "name": "Bitcoin",
      "network": "Bitcoin",
      "decimals": 8,
      "send": true,
      "receive": true,
      "memo": null,
      "icon_url": "https://swapnoir.com/assets/coins/btc.svg"
    },
    {
      "id": "BTC-LN",
      "ticker": "BTC",
      "name": "Bitcoin",
      "network": "Lightning",
      "decimals": 8,
      "send": true,
      "receive": false,
      "memo": null,
      "icon_url": "https://swapnoir.com/assets/coins/btc.svg"
    },
    {
      "id": "XRP",
      "ticker": "XRP",
      "name": "XRP",
      "network": "XRP Ledger",
      "decimals": 6,
      "send": true,
      "receive": true,
      "memo": "Destination tag",
      "icon_url": "https://swapnoir.com/assets/coins/xrp.svg"
    }
  ]
}
Yanıt alanları
AlanTürAçıklama
idstringPara birimi ve ağ.
tickerstring
namestring
networkstring
decimalsintegerTutarlarda kabul edilen en fazla ondalık basamak sayısı.
sendbooleanfrom olarak kullanılabilir.
receivebooleanto olarak kullanılabilir.
memostring or nullBazı ağların adresle birlikte istediği ek alanın adı, örneğin Destination tag; kullanılmıyorsa null.
icon_urlstring

Tahmin al

GET/api/v1/estimate

Kullanıcının amount kadar from karşılığında ne kadar to alacağı; ödeme için tüm takas ve ağ ücretleri zaten dahildir. Tahminler canlıdır ve rezerve edilmez: nihai tutar, takas oluşturulduğunda (sabit kur) veya yatırma işlemi onaylandığında (değişken kur) belirlenir.

Parametreler

AdKonumAçıklama
fromzorunluqueryKullanıcının gönderdiği para birimi. Örnek: BTC.
tozorunluqueryKullanıcının aldığı para birimi. BTC-LN yalnızca gönderim içindir. Örnek: XMR.
amountzorunluqueryfrom tutarı; nokta ile yazılmış ondalık sayı olarak ve en fazla para biriminin decimals değeri kadar basamakla. Örnek: 0.01.
ratequeryfloat (varsayılan), yatırma işlemi onaylanana kadar piyasayı takip eder. fixed, takas oluşturulduğunda tutarı sabitler. Şunlardan biri: float, fixed. Örnek: float.

İstek

curl "https://swapnoir.com/api/v1/estimate?from=BTC&to=XMR&amount=0.01&rate=float"
const params = new URLSearchParams({ from: "BTC", to: "XMR", amount: "0.01" });
const res = await fetch(`https://swapnoir.com/api/v1/estimate?${params}`);
const data = await res.json();

if (!res.ok) {
  // RFC 9457 problem, e.g. data.code === "amount_too_small"
  throw new Error(data.detail);
}
console.log(data.amount_to, data.to);
import requests

r = requests.get(
    "https://swapnoir.com/api/v1/estimate",
    params={"from": "BTC", "to": "XMR", "amount": "0.01"},
    timeout=10,
)
data = r.json()
if not r.ok:
    raise RuntimeError(data["code"] + ": " + data["detail"])
print(data["amount_to"], data["to"])

Yanıt

200 OK
{
  "from": "BTC",
  "to": "XMR",
  "rate_type": "float",
  "amount_from": "0.01",
  "amount_to": "1.57166029",
  "rate": "157.166029",
  "usd_value": "866.32",
  "quoted_at": "2026-10-05T12:00:00.000Z"
}
422 Minimumun altında
{
  "type": "https://swapnoir.com/api#error-amount_too_small",
  "title": "Amount below minimum",
  "status": 422,
  "detail": "The minimum for this pair is 0.00005799 BTC.",
  "code": "amount_too_small",
  "min_amount": "0.00005799"
}
400 Geçersiz parametre
{
  "type": "https://swapnoir.com/api#error-invalid_parameter",
  "title": "Invalid parameter",
  "status": 400,
  "detail": "Unknown currency `DOG`. See /api/v1/currencies.",
  "code": "invalid_parameter",
  "param": "from"
}
Yanıt alanları
AlanTürAçıklama
fromstringPara birimi ve ağ.
tostringYalnızca gönderim için olanlar dışındaki tüm para birimleri.
rate_typestringKur türü
amount_fromstringSorguladığınız tutar.
amount_tostringTüm ücretler düşüldükten sonra kullanıcının alacağı tutar.
ratestringÜcretler düşüldükten sonra 1 from başına to miktarı.
usd_valuestring or nullBiliniyorsa amount_from değerinin yaklaşık ABD doları karşılığı.
quoted_atstring

Siparişi getir

GET/api/v1/orders/{id}

Bir takasın canlı durumu ve ayrıntıları. Sipariş numarası, sipariş sayfası URL’sinin son kısmıdır. Numaraya sahip olan herkes siparişi görebilir; bu yüzden onu bir parola gibi koruyun. En fazla 10 saniyede bir sorgulayın ve final true olduğunda durun. Siparişler sonuçlandıktan 7 gün sonra silinir.

Parametreler

AdKonumAçıklama
idzorunlupathSipariş numarası, örneğin K7M2QX9PRT4B.

İstek

curl "https://swapnoir.com/api/v1/orders/K7M2QX9PRT4B"
const res = await fetch(`https://swapnoir.com/api/v1/orders/${orderId}`);
if (res.status === 404) {
  // wrong ID, or the order was deleted
}
const order = await res.json();
console.log(order.status, order.final);
import time
import requests

while True:
    r = requests.get(f"https://swapnoir.com/api/v1/orders/{order_id}", timeout=10)
    if r.status_code == 404:
        break  # wrong ID, or the order was deleted
    order = r.json()
    print(order["status"])
    if order["final"]:
        break
    time.sleep(15)

Yanıt

200 OK
{
  "id": "K7M2QX9PRT4B",
  "status": "confirming",
  "final": false,
  "rate_type": "float",
  "created_at": "2026-10-05T12:00:00.000Z",
  "updated_at": "2026-10-05T12:06:12.000Z",
  "from": {
    "currency": "BTC",
    "amount": "0.01"
  },
  "to": {
    "currency": "XMR",
    "amount": "1.57166029",
    "amount_is_final": false
  },
  "deposit": {
    "address": "bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq",
    "memo": null,
    "expires_at": null
  },
  "payout": {
    "address": "888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnjyPbb3iQ1YBRk1UXcdRsiKc9dhwMVgN5S9cQUiyoogDavup3H",
    "memo": null
  },
  "refund": null,
  "transactions": {
    "deposit": {
      "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "url": "https://mempool.space/tx/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
    },
    "payout": null
  },
  "links": {
    "order_page": "https://swapnoir.com/order/K7M2QX9PRT4B",
    "receipt": "https://swapnoir.com/order/K7M2QX9PRT4B/receipt.txt"
  }
}
404 Bulunamadı
{
  "type": "https://swapnoir.com/api#error-not_found",
  "title": "Not found",
  "status": 404,
  "detail": "No order with this ID. Orders are deleted 7 days after they finish.",
  "code": "not_found"
}
Yanıt alanları
AlanTürAçıklama
idstringSipariş numarası
statusstringSipariş durumu
finalbooleandone, expired, refunded ve failed için true: sorgulamayı bırakın.
rate_typestringKur türü
created_atstring
updated_atstring
fromobject
from.currencystringPara birimi ve ağ.
from.amountstringYatırılacak tutar.
toobject
to.currencystringPara birimi ve ağ.
to.amountstring or nullTahmini ödeme tutarı; amount_is_final true olduğunda ise nihai ödeme tutarı.
to.amount_is_finalboolean
depositobject
deposit.addressstring or nullKullanıcının yatırma işlemini göndereceği yer; durum preparing iken null.
deposit.memostring or nullAyarlanmışsa yatırma işlemine eklenmesi gereken memo veya hedef etiketi.
deposit.expires_atstring or nullAyarlanmışsa bu zamandan önce gönderin.
payoutobject
payout.addressstring
payout.memostring or null
refundnull or object
refund.addressstring
refund.memostring or null
transactionsobject
transactions.depositnull or object
transactions.deposit.hashstring
transactions.deposit.urlstring or nullBiliniyorsa blok gezgini bağlantısı.
transactions.payoutnull or object
transactions.payout.hashstring
transactions.payout.urlstring or nullBiliniyorsa blok gezgini bağlantısı.
linksobject
links.order_pagestring
links.receiptstring

Kılavuzlar

Takas oluşturma

Takaslar swapnoir.com üzerinde oluşturulur; böylece kullanıcınız her zaman kendi sipariş sayfasını alır ve sayfanın kontrolü onda kalır. Uygulamanız, coinler ve tutar önceden doldurulmuş olarak kullanıcıyı oraya yönlendirir:

BağlantıAçılan sayfa
https://swapnoir.com/exchange?from=BTC&to=XMR&amount=0.01&rate=floatCanlı tahminin gösterildiği adres adımındaki takas. “Hemen takas et” düğmeleri için en uygunu.
https://swapnoir.com/?from=BTC&to=XMR&amount=0.01Takas kutusu doldurulmuş ana sayfa; kullanıcı coinleri ve tutarı yine de değiştirebilir.

Her ikisi de Tahmin al ile aynı from, to, amount ve isteğe bağlı rate parametrelerini alır. Sayfayı başka bir dilde açmak için dil kodunu başa ekleyin, örneğin /de/exchange?….

<a href="https://swapnoir.com/exchange?from=BTC&to=XMR&amount=0.01&rate=float" rel="noopener">
  Exchange BTC to XMR on Swapnoir
</a>
  1. Kullanıcı alım adresini ve isteğe bağlı bir iade adresini yapıştırır, hızlı bir güvenlik kontrolünden geçer ve Hemen takas et düğmesine basar.
  2. Kullanıcı, yatırma adresinin ve tutarın yer aldığı sipariş sayfasına (https://swapnoir.com/order/<ID>) ulaşır.
  3. Uygulamanızın siparişi takip etmesi gerekiyorsa kullanıcıdan sipariş bağlantısını veya numarasını yapıştırmasını isteyin, ardından Siparişi getir uç noktasını düzenli olarak sorgulayın.

Sipariş durumları

Normal bir takas sırasıyla şu durumlardan geçer: awaiting → confirming → exchanging → sending → done. status değerini kullanıcınıza kendi ifadelerinizle gösterin ve final true olduğunda sorgulamayı bırakın.

DurumNihaiAnlamı
preparingHayırYatırma adresi hazırlanıyor. Genellikle birkaç dakika içinde görünür.
awaitingHayırYatırma işlemi bekleniyor. Yalnızca sipariş bu durumdayken ve deposit.expires_at zamanından önce gönderin.
confirmingHayırYatırma işlemi görüldü ve ağ onaylarını bekliyor.
exchangingHayırYatırma işlemi onaylandı ve takas ediliyor.
sendingHayırTakas edilen coinler alım adresine gönderiliyor.
processingHayırDevam ediyor. Daha belirli bir durum bilinmediğinde kullanılır.
doneEvetTamamlandı. Ödeme gönderildi; bkz. transactions.payout.
expiredEvetYatırma işlemi zamanında ulaşmadı. Geç gelen bir yatırma işlemi destek ekibi aracılığıyla yine de tamamlanabilir veya iade edilebilir.
holdHayırRutin bir inceleme için durduruldu. Kullanıcı sipariş numarasıyla destek ekibine başvurmalıdır.
attentionHayırKontrol edilmesi gereken bir durum var, örneğin yanlış tutarda bir yatırma işlemi. Kullanıcı destek ekibine başvurmalıdır.
refundingHayırYatırılan tutar iade adresine geri gönderiliyor.
refundedEvetYatırılan tutar iade edildi.
failedEvetTakas tamamlanamadı. Kullanıcı destek ekibine başvurmalıdır.

Desteklenen para birimleri

Para birimlerini listele uç noktasının döndürdüğü listenin aynısı. Zamanla yeni para birimleri eklenir; bu nedenle listeyi koda sabit yazmak yerine API’den okuyun.

IDPara birimiAğOndalık basamakAlınabilirMemo
BTCBitcoinBitcoin8Evet–
XMRMoneroMonero12Evet–
ETHEthereumEthereum8Evet–
USDT-TRC20TetherTron (TRC20)6Evet–
USDT-ERC20TetherEthereum (ERC20)6Evet–
USDT-SOLTetherSolana6Evet–
USDC-ERC20USD CoinEthereum (ERC20)6Evet–
LTCLitecoinLitecoin8Evet–
SOLSolanaSolana9Evet–
BTC-LNBitcoin LightningLightning8Yalnızca gönderim–
TRXTronTron6Evet–
BNBBNBBNB Smart Chain (BEP20)8Evet–
DOGEDogecoinDogecoin8Evet–
ZECZcashZcash8Evet–
BCHBitcoin CashBitcoin Cash8Evet–
DASHDashDash8Evet–
XRPXRPXRP Ledger6EvetHedef etiketi

Entegrasyon kontrol listesi

  1. Ağı gösterinAğı her zaman coinin yanında gösterin, ör. Tron üzerinde USDT. Yanlış ağda gönderim fonların kaybına yol açabilir.
  2. Memoyu gösterindeposit.memo ayarlandığında yatırma işlemi bunu içermelidir. Memoyu adres kadar net gösterin.
  3. Sabit kuru açıklayınSabit kurlu bir takas, teklif edilen tutarı yalnızca kullanıcı deposit.expires_at zamanından önce tam olarak from.amount gönderirse öder.
  4. Sipariş numaralarını gizli tutunSipariş numarasına sahip olan herkes o siparişi görebilir. Numaraları analitik araçlarına, günlüklere veya herkese açık URL’lere koymayın.
  5. Hataları koda göre işleyincode değerine göre işlem yapın, detail değerini gösterin ve Retry-After süresine uyun.
  6. Gerçek siteye bağlantı verinYalnızca https://swapnoir.com adresine bağlantı verin. Kullanıcılardan asla kurtarma ifadesi veya özel anahtar istemeyin.

Değişiklik günlüğü

  • v1 yayımlandı. GET /currencies, GET /estimate, GET /orders/{id}, RFC 9457 hataları, RateLimit başlıkları ve OpenAPI 3.1 açıklaması.

Destek

Entegrasyonunuzla ilgili sorular, fikirler veya daha yüksek limitler için bize mesaj gönderin ya da info@swapnoir.com üzerinden bize ulaşın. API kullanımı Koşullar ve Gizlilik sayfalarımıza tabidir.

Son güncelleme: .