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.
- Takas edilebilecekleri listeleyin. Diğer çağrılarda her para biriminin
iddeğerini kullanın.curl "https://swapnoir.com/api/v1/currencies" - 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" - 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"
İstekler ve veriler
| Temel URL | https://swapnoir.com/api/v1. Yalnızca HTTPS. |
|---|---|
| Yöntemler | Tüm uç noktalar GET yöntemini kullanır. Parametreler sorgu dizesinde veya yolda yer alır. |
| Yanıtlar | application/json, UTF-8. Hatalarda application/problem+json kullanılır. |
| Tutarlar | Hassasiyet 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 kimlikleri | Para 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. |
| Zamanlar | UTC cinsinden ISO 8601, örneğin 2026-10-05T12:00:00.000Z. |
| Tarayıcılar | CORS açıktır (Access-Control-Allow-Origin: *), bu nedenle API’yi bir web sayfasından çağırabilirsiniz. Çerez kullanılmaz. |
| Tor | http://swapnoqyyp3mfh3hoypzmvpnau7gymt7c32tybx2qew3s7sw7bzz7aqd.onion/api/v1 adresinde Tor üzerinden de aynı uç noktalar ve limitlerle kullanılabilir. |
| Sürümleme | Sü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ç nokta | Dakika başına istek |
|---|---|
GET /currencies | 60 |
GET /estimate | 90 |
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.
/currenciesyanı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
finaldeğeritrueolduğ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.
{
"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"
}| Kod | HTTP | Anlamı |
|---|---|---|
invalid_parameter | 400 | Bir sorgu parametresi eksik veya hatalı biçimlendirilmiş. Hangisi olduğunu param belirtir. |
same_currency | 400 | from ve to aynı para birimi. |
receive_not_supported | 400 | to para birimi yalnızca gönderim içindir (Lightning). |
amount_too_small | 422 | Tutar bu çiftin minimumunun altında. Minimum değer min_amount alanındadır. |
pair_not_supported | 422 | Bu para birimi ve ağ çifti sunulmuyor. |
pair_unavailable | 503 | Bu çift için şu anda kur yok. Daha sonra tekrar deneyin veya başka bir tutar deneyin. |
not_found | 404 | Bu numarayla bir sipariş yok ya da sipariş silinmiş. |
rate_limited | 429 | İstek limitine ulaştınız. Retry-After içindeki saniye kadar bekleyin. |
internal_error | 500 | Bizim 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
{
"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ı
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Para birimi ve ağ. |
ticker | string | |
name | string | |
network | string | |
decimals | integer | Tutarlarda kabul edilen en fazla ondalık basamak sayısı. |
send | boolean | from olarak kullanılabilir. |
receive | boolean | to olarak kullanılabilir. |
memo | string or null | Bazı ağların adresle birlikte istediği ek alanın adı, örneğin Destination tag; kullanılmıyorsa null. |
icon_url | string |
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
| Ad | Konum | Açıklama |
|---|---|---|
fromzorunlu | query | Kullanıcının gönderdiği para birimi. Örnek: BTC. |
tozorunlu | query | Kullanıcının aldığı para birimi. BTC-LN yalnızca gönderim içindir. Örnek: XMR. |
amountzorunlu | query | from tutarı; nokta ile yazılmış ondalık sayı olarak ve en fazla para biriminin decimals değeri kadar basamakla. Örnek: 0.01. |
rate | query | float (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
{
"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"
}{
"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"
}{
"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ı
| Alan | Tür | Açıklama |
|---|---|---|
from | string | Para birimi ve ağ. |
to | string | Yalnızca gönderim için olanlar dışındaki tüm para birimleri. |
rate_type | string | Kur türü |
amount_from | string | Sorguladığınız tutar. |
amount_to | string | Tüm ücretler düşüldükten sonra kullanıcının alacağı tutar. |
rate | string | Ücretler düşüldükten sonra 1 from başına to miktarı. |
usd_value | string or null | Biliniyorsa amount_from değerinin yaklaşık ABD doları karşılığı. |
quoted_at | string |
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
| Ad | Konum | Açıklama |
|---|---|---|
idzorunlu | path | Sipariş 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
{
"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"
}
}{
"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ı
| Alan | Tür | Açıklama |
|---|---|---|
id | string | Sipariş numarası |
status | string | Sipariş durumu |
final | boolean | done, expired, refunded ve failed için true: sorgulamayı bırakın. |
rate_type | string | Kur türü |
created_at | string | |
updated_at | string | |
from | object | |
from.currency | string | Para birimi ve ağ. |
from.amount | string | Yatırılacak tutar. |
to | object | |
to.currency | string | Para birimi ve ağ. |
to.amount | string or null | Tahmini ödeme tutarı; amount_is_final true olduğunda ise nihai ödeme tutarı. |
to.amount_is_final | boolean | |
deposit | object | |
deposit.address | string or null | Kullanıcının yatırma işlemini göndereceği yer; durum preparing iken null. |
deposit.memo | string or null | Ayarlanmışsa yatırma işlemine eklenmesi gereken memo veya hedef etiketi. |
deposit.expires_at | string or null | Ayarlanmışsa bu zamandan önce gönderin. |
payout | object | |
payout.address | string | |
payout.memo | string or null | |
refund | null or object | |
refund.address | string | |
refund.memo | string or null | |
transactions | object | |
transactions.deposit | null or object | |
transactions.deposit.hash | string | |
transactions.deposit.url | string or null | Biliniyorsa blok gezgini bağlantısı. |
transactions.payout | null or object | |
transactions.payout.hash | string | |
transactions.payout.url | string or null | Biliniyorsa blok gezgini bağlantısı. |
links | object | |
links.order_page | string | |
links.receipt | string |
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=float | Canlı 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.01 | Takas 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>- 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.
- Kullanıcı, yatırma adresinin ve tutarın yer aldığı sipariş sayfasına (
https://swapnoir.com/order/<ID>) ulaşır. - 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.
| Durum | Nihai | Anlamı |
|---|---|---|
preparing | Hayır | Yatırma adresi hazırlanıyor. Genellikle birkaç dakika içinde görünür. |
awaiting | Hayır | Yatırma işlemi bekleniyor. Yalnızca sipariş bu durumdayken ve deposit.expires_at zamanından önce gönderin. |
confirming | Hayır | Yatırma işlemi görüldü ve ağ onaylarını bekliyor. |
exchanging | Hayır | Yatırma işlemi onaylandı ve takas ediliyor. |
sending | Hayır | Takas edilen coinler alım adresine gönderiliyor. |
processing | Hayır | Devam ediyor. Daha belirli bir durum bilinmediğinde kullanılır. |
done | Evet | Tamamlandı. Ödeme gönderildi; bkz. transactions.payout. |
expired | Evet | Yatı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. |
hold | Hayır | Rutin bir inceleme için durduruldu. Kullanıcı sipariş numarasıyla destek ekibine başvurmalıdır. |
attention | Hayır | Kontrol edilmesi gereken bir durum var, örneğin yanlış tutarda bir yatırma işlemi. Kullanıcı destek ekibine başvurmalıdır. |
refunding | Hayır | Yatırılan tutar iade adresine geri gönderiliyor. |
refunded | Evet | Yatırılan tutar iade edildi. |
failed | Evet | Takas 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.
| ID | Para birimi | Ağ | Ondalık basamak | Alınabilir | Memo |
|---|---|---|---|---|---|
BTC | Bitcoin | 8 | Evet | – | |
XMR | Monero | 12 | Evet | – | |
ETH | Ethereum | 8 | Evet | – | |
USDT-TRC20 | Tron (TRC20) | 6 | Evet | – | |
USDT-ERC20 | Ethereum (ERC20) | 6 | Evet | – | |
USDT-SOL | Solana | 6 | Evet | – | |
USDC-ERC20 | Ethereum (ERC20) | 6 | Evet | – | |
LTC | Litecoin | 8 | Evet | – | |
SOL | Solana | 9 | Evet | – | |
BTC-LN | Lightning | 8 | Yalnızca gönderim | – | |
TRX | Tron | 6 | Evet | – | |
BNB | BNB Smart Chain (BEP20) | 8 | Evet | – | |
DOGE | Dogecoin | 8 | Evet | – | |
ZEC | Zcash | 8 | Evet | – | |
BCH | Bitcoin Cash | 8 | Evet | – | |
DASH | Dash | 8 | Evet | – | |
XRP | XRP Ledger | 6 | Evet | Hedef etiketi |
Entegrasyon kontrol listesi
- 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.
- Memoyu gösterin
deposit.memoayarlandığında yatırma işlemi bunu içermelidir. Memoyu adres kadar net gösterin. - Sabit kuru açıklayınSabit kurlu bir takas, teklif edilen tutarı yalnızca kullanıcı
deposit.expires_atzamanından önce tam olarakfrom.amountgönderirse öder. - 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.
- Hataları koda göre işleyin
codedeğerine göre işlem yapın,detaildeğerini gösterin veRetry-Aftersüresine uyun. - 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ı,RateLimitbaş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: .