TradeWize Developer API · v1

API Referansı

Kimlik doğrulama, hesap, emir, bot, liste ve piyasa verisi endpointleri.

58 REST endpoint 11 endpoint grubu 2 socket metodu
Base URL https://api.tradewize.com.tr

İndirilebilir dosyalar

Postman test API’sini varsayılan kullanır; sandbox değildir ve bağlı gerçek hesabı etkileyebilir. PDF çevrimdışı referanstır.

Kimlik Doğrulama

TradeWize Developer API, OAuth 2.0 Client Credentials akışını kullanır. API anahtarınızı bir JWT access token ile değiştirir, sonraki tüm çağrılarda bu token’ı gönderirsiniz.

2 endpoint
POST /oauth/token herkese açık

API anahtarı ile token alma

API anahtarınızı JWT access token ile değiştirir. Bu, akıştaki ilk adımdır; dönen access token’ı sonraki tüm isteklerde Authorization başlığında kullanırsınız.

API anahtarını gizli tutun API anahtarınız hassas bir sırdır. Sürüm kontrolüne eklemeyin, istemci tarafı koda gömmeyin; ortam değişkeni veya güvenli bir sır yöneticisinde saklayın.
Access token 24 saat (86400 sn), refresh token 30 gün (2592000 sn) geçerlidir. Süre dolmadan refresh token ile yeni bir token seti alın.

Başlıklar

API anahtarı ile token alma — Başlıklar
Alan Tip Açıklama
X-API-Key zorunlu string Panelden aldığınız API anahtarı (tw_live_ ile başlar).
Content-Type zorunlu string application/json olmalıdır.

Gövde alanları

API anahtarı ile token alma — Gövde alanları
Alan Tip Açıklama
grant_type zorunlu string "api_key" değerini alır.
İstekcURL
curl -X POST https://api.tradewize.com.tr/oauth/token \
  -H "X-API-Key: tw_live_api_anahtariniz" \
  -H "Content-Type: application/json" \
  -d '{"grant_type": "api_key"}'
GövdeJSON
{
  "grant_type": "api_key"
}
Yanıt · 200JSON
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 86400,
  "refresh_token": "rf_PAKhXhWmSeeicx6bAb1pg1FroLm1ig7jyMOpe...",
  "refresh_expires_in": 2592000,
  "issued_at": "2026-07-06T12:00:00Z"
}
C# örneğini göster
// TradeWizeClient içine ekleyin — API anahtarıyla ilk token setini alır.
public async Task<bool> AuthenticateAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/oauth/token");
    request.Headers.Add("X-API-Key", _apiKey);
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { grant_type = "api_key" }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();

    var json = await response.Content.ReadAsStringAsync();
    StoreTokens(JsonSerializer.Deserialize<TokenResponse>(json));
    return true;
}

// Kullanım
var apiKey = Environment.GetEnvironmentVariable("TRADEWIZE_API_KEY")!;
var client = new TradeWizeClient(apiKey);
await client.AuthenticateAsync();
POST /oauth/token herkese açık

Token yenileme

Elinizdeki refresh token ve API anahtarınız ile yeni bir access token seti alır. Yenileme isteğinde X-API-Key header'ı zorunludur.

Refresh token tek kullanımlıktır Her yenilemede yeni bir refresh token döner; eskisi geçersiz olur. Aynı refresh token’ı tekrar kullanmak güvenlik olayı sayılır ve tüm token ailesi iptal edilir.

Başlıklar

Token yenileme — Başlıklar
Alan Tip Açıklama
X-API-Key zorunlu string Token setinin bağlı olduğu Developer API anahtarı.
Content-Type zorunlu string application/json olmalıdır.

Gövde alanları

Token yenileme — Gövde alanları
Alan Tip Açıklama
grant_type zorunlu string "refresh_token" değerini alır.
refresh_token zorunlu string Önceki yanıtta dönen geçerli refresh token.
İstekcURL
curl -X POST https://api.tradewize.com.tr/oauth/token \
  -H "X-API-Key: tw_live_api_anahtariniz" \
  -H "Content-Type: application/json" \
  -d '{
    "grant_type": "refresh_token",
    "refresh_token": "rf_PAKhXhWmSeeicx6bAb1pg1FroLm1ig7jyMOpe..."
  }'
GövdeJSON
{
  "grant_type": "refresh_token",
  "refresh_token": "rf_PAKhXhWmSeeicx6bAb1pg1FroLm1ig7jyMOpe..."
}
Yanıt · 200JSON
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 86400,
  "refresh_token": "rf_YENI_REFRESH_TOKEN...",
  "refresh_expires_in": 2592000,
  "issued_at": "2026-07-06T12:00:00Z"
}
C# örneğini göster
// TradeWizeClient içine ekleyin — refresh token ile yeni token seti alır.
public async Task<bool> RefreshTokenAsync()
{
    if (string.IsNullOrWhiteSpace(_refreshToken))
        return await AuthenticateAsync();

    var request = new HttpRequestMessage(HttpMethod.Post, "/oauth/token")
    {
        Content = new StringContent(
            JsonSerializer.Serialize(new
            {
                grant_type = "refresh_token",
                refresh_token = _refreshToken
            }),
            Encoding.UTF8, "application/json")
    };
    request.Headers.Add("X-API-Key", _apiKey);

    var response = await _httpClient.SendAsync(request);
    if (!response.IsSuccessStatusCode)
        return await AuthenticateAsync(); // refresh token süresi dolmuşsa API anahtarına düş

    var json = await response.Content.ReadAsStringAsync();
    StoreTokens(JsonSerializer.Deserialize<TokenResponse>(json));
    return true;
}

Hesaplar

Aracı kurum hesaplarınızı listeleyin, hesaba giriş yapın, pozisyonları ve gün içi emirleri okuyun. Tüm çağrılar JWT gerektirir; yanıtlar { success, message, data } zarfıyla döner.

4 endpoint
GET /api/v1/accounts portfolio

Hesapları listele

Yapılandırılmış tüm aracı kurumlardan kullanıcının hesaplarını toplayıp tek listede döndürür. Sorgular paralel yapılır.

Bir aracı kurum yanıt vermezse istek hataya düşmez; erişilebilen kurumlardan gelen hesaplar döndürülür. Diğer uçlarda hesabı tanımlamak için brokerageCode ve accountNumber alanlarını kullanın.
İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/accounts \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "accountNumber": "77777",
      "name": "Ana Hesap",
      "description": null,
      "brokerageName": "TradeWize Yatırım Menkul Değerler",
      "brokerageCode": "TradeWiseYatirim",
      "isActive": true,
      "isDefault": true
    }
  ]
}
C# örneğini göster
// Tüm aracı kurumlardaki hesapları listeler.
public async Task<string> GetAccountsAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/v1/accounts");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/accounts/login manage

Hesaba giriş (SMS doğrulamalı)

Aracı kurum hesabına iki aşamalı giriş yapar. 1. aşamada SMS talep edilir, 2. aşamada gelen kod ile giriş tamamlanır.

Aşama 1 — SMS talebi sessionId ve sms alanları OLMADAN gönderin. Yanıtta otp = 1 ve sessionId dolu geliyorsa SMS telefonunuza iletilmiştir.
Aşama 2 — SMS doğrulama Aynı gövdeye 1. aşamadan gelen sessionId ile telefondaki sms kodunu ekleyip tekrar gönderin. Başarılıysa yanıt authenticated = true döner.

Gövde alanları

Hesaba giriş (SMS doğrulamalı) — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu (örn. "TradeWiseYatirim"). Her iki aşamada gönderilir.
username zorunlu string TC Kimlik No. Her iki aşamada gönderilir.
password zorunlu string Hesap şifresi. Her iki aşamada gönderilir.
accountNumber zorunlu string Aracı kurumdaki hesap numarası. Her iki aşamada gönderilir.
sessionId string 1. aşama yanıtından gelen oturum kimliği. Yalnızca 2. aşamada.
sms string Telefona gelen SMS kodu. Yalnızca 2. aşamada.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/accounts/login \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "username": "12345678900",
    "password": "Sifre123",
    "accountNumber": "77777"
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "username": "12345678900",
  "password": "Sifre123",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "SMS gönderildi",
  "data": {
    "otp": 1,
    "sessionId": "41824250",
    "requiresSms": true,
    "authenticated": false,
    "additionalInfo": "SMS kodu telefonunuza gönderildi"
  }
}
C# örneğini göster
// Aracı kurum hesabına SMS doğrulamalı giriş.
// Aşama 1: sessionId/sms boş → SMS gönderilir. Aşama 2: sessionId + sms eklenir.
public async Task<string> LoginAsync(
    string brokerageCode, string username, string password,
    string accountNumber, string? sessionId = null, string? sms = null)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/accounts/login");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new
        {
            brokerageCode, username, password, accountNumber, sessionId, sms
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

// Kullanım
await client.LoginAsync("TradeWiseYatirim", "12345678900", "Sifre123", "77777");                       // Aşama 1
await client.LoginAsync("TradeWiseYatirim", "12345678900", "Sifre123", "77777", "41824250", "642529"); // Aşama 2
POST /api/v1/accounts/positions portfolio

Pozisyonları getir

Hesabın pozisyonlarını, nakit değerlerini ve portföy özetini döndürür. includeOrders true ise bekleyen/tamamlanan emir listeleri de eklenir.

Hız sınırı Her hesap numarası için bu endpoint 3 saniyede 1 kez çağrılabilir. Farklı hesap numaraları ve günlük emir endpoint’i ayrı sayaç kullanır. Aşılırsa 429 yanıtı ve Retry-After başlığı döner.

Gövde alanları

Pozisyonları getir — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
includeOrders boolean true = pozisyonlar + emir listeleri, false = yalnızca pozisyonlar.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/accounts/positions \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode": "TradeWiseYatirim", "accountNumber": "77777", "includeOrders": false}'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "includeOrders": false
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "accountNumber": "77777",
    "dateTime": "2026-07-06T14:32:00Z",
    "accountBalance": 152340.50,
    "transactionLimit": 48000.00,
    "cashAmount": 12500.00,
    "t1NetCashAmount": 12500.00,
    "t2NetCashAmount": 12500.00,
    "overall": 152340.50,
    "stockOverall": 139840.50,
    "totalProfit": 8420.75,
    "positions": [
      {
        "symbol": "THYAO",
        "lot": 100,
        "sellable": 100,
        "profit": 3250.00,
        "bloke": 0,
        "dateTime": "2026-07-06T14:32:00Z"
      }
    ],
    "waitingList": [],
    "completedList": [
      {
        "symbol": "THYAO",
        "buySell": 1,
        "quantity": 100,
        "orderStatus": "Completed",
        "orderNo": "305344701",
        "description": "",
        "executedPrice": 310.50,
        "executedAt": "2026-07-06T14:32:11"
      }
    ],
    "pendingList": [],
    "cancelledList": []
  }
}
C# örneğini göster
// Hesap pozisyonlarını ve portföy özetini getirir.
// Aynı accountNumber için bu endpoint 3 saniyede 1 kez çağrılabilir.
public async Task<string> GetPositionsAsync(
    string brokerageCode, string accountNumber, bool includeOrders = false)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/accounts/positions");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { brokerageCode, accountNumber, includeOrders }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/accounts/daily-orders portfolio

Gün içi emirleri listele

Hesapta o işlem günü verilen tüm emirleri (bekleyen ve tamamlanan) listeler.

buySell: 1 = Alış, 2 = Satış. orderStatus değerleri: Pending, Waiting, Completed, Canceled, MarketSell.
executedPrice: emir gerçekleştiğinde oluşan ortalama işlem fiyatı (henüz gerçekleşmemişse 0). executedAt: emrin gerçekleştiği an (saniye hassasiyetinde; henüz gerçekleşmemişse null).
Hız sınırı Her hesap numarası için bu endpoint 3 saniyede 1 kez çağrılabilir. Farklı hesap numaraları ve pozisyon endpoint’i ayrı sayaç kullanır. Aşılırsa 429 yanıtı ve Retry-After başlığı döner.

Gövde alanları

Gün içi emirleri listele — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/accounts/daily-orders \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode": "TradeWiseYatirim", "accountNumber": "77777"}'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "symbol": "THYAO",
      "buySell": 1,
      "quantity": 100,
      "orderStatus": "Completed",
      "orderNo": "305344701",
      "description": "",
      "executedPrice": 310.50,
      "executedAt": "2026-07-06T14:32:11"
    },
    {
      "symbol": "EREGL",
      "buySell": 2,
      "quantity": 50,
      "orderStatus": "Pending",
      "orderNo": "305344702",
      "description": "",
      "executedPrice": 0,
      "executedAt": null
    }
  ]
}
C# örneğini göster
// Hesabın gün içi emirlerini listeler.
// Aynı accountNumber için bu endpoint 3 saniyede 1 kez çağrılabilir.
public async Task<string> GetDailyOrdersAsync(string brokerageCode, string accountNumber)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/accounts/daily-orders");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { brokerageCode, accountNumber }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

Emirler

Emir gönderin, zincir ve toplu emir verin, bekleyen emirleri güncelleyin veya iptal edin. Tüm uçlar trade kapsamı gerektirir. Ortak alanlar: buySell (1 = Alış, 2 = Satış), orderType (1 = Piyasa, 2 = Limit).

7 endpoint
POST /api/v1/orders trade

Emir gönder

Aracı kuruma tek bir emir iletir.

orderStatus değerleri: -1 UnProcessedSell, 0 UnProcessed, 1 Pending, 2 Waiting, 3 Completed, 4 Canceled, 5 MarketSell.
Rate limit Emir iletimi kullanıcı + aracı kurum başına kurum kotasına tabidir (Marbaş Menkul: dakikada 500 emir). Tüm limitler için Rate limiting bölümüne bakın.

Gövde alanları

Emir gönder — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
symbol zorunlu string İşlem sembolü (örn. "FROTO").
quantity zorunlu integer Emir miktarı (lot).
buySell zorunlu integer 1 = Alış, 2 = Satış.
orderType zorunlu integer 1 = Piyasa (price 0), 2 = Limit.
price decimal Emir fiyatı. Limit emirde zorunlu, piyasa emirde 0.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "symbol": "FROTO",
    "quantity": 1,
    "buySell": 1,
    "orderType": 2,
    "price": 101.50
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "symbol": "FROTO",
  "quantity": 1,
  "buySell": 1,
  "orderType": 2,
  "price": 101.50
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "symbol": "FROTO",
    "quantity": 1,
    "buySell": 1,
    "orderNo": "12345678",
    "orderStatus": 1
  }
}
C# örneğini göster
// Tek emir gönderir. orderType: 1 = Piyasa (price 0), 2 = Limit.
public async Task<string> SendOrderAsync(
    string brokerageCode, string accountNumber, string symbol,
    int quantity, int buySell, int orderType, decimal price)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new
        {
            brokerageCode, accountNumber, symbol, quantity, buySell, orderType, price
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

// Kullanım (limit alış)
await client.SendOrderAsync("TradeWiseYatirim", "77777", "FROTO", 1, 1, 2, 101.50m);
POST /api/v1/orders/chain trade

Zincir emir gönder

Var olan bir emre bağlı (referans emir gerçekleşince tetiklenen) zincir emir iletir.

Rate limit Emir iletimi kullanıcı + aracı kurum başına kurum kotasına tabidir (Marbaş Menkul: dakikada 500 emir). Tüm limitler için Rate limiting bölümüne bakın.

Gövde alanları

Zincir emir gönder — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
symbol zorunlu string İşlem sembolü.
quantity zorunlu integer Emir miktarı (lot).
buySell zorunlu integer 1 = Alış, 2 = Satış.
orderType zorunlu integer 1 = Piyasa, 2 = Limit.
price decimal Emir fiyatı (limit emirde zorunlu).
referenceOrderNo zorunlu string Bağlanılacak emrin numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/chain \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "symbol": "ADESE",
    "quantity": 100,
    "buySell": 1,
    "orderType": 2,
    "price": 1.50,
    "referenceOrderNo": "305344701"
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "symbol": "ADESE",
  "quantity": 100,
  "buySell": 1,
  "orderType": 2,
  "price": 1.50,
  "referenceOrderNo": "305344701"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "symbol": "ADESE",
    "quantity": 100,
    "buySell": 1,
    "orderNo": "12345679",
    "orderStatus": 1
  }
}
C# örneğini göster
// Referans emre bağlı zincir emir gönderir.
public async Task<string> SendChainOrderAsync(
    string brokerageCode, string accountNumber, string symbol,
    int quantity, int buySell, int orderType, decimal price, string referenceOrderNo)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/chain");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new
        {
            brokerageCode, accountNumber, symbol, quantity,
            buySell, orderType, price, referenceOrderNo
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/orders/batch trade

Toplu emir gönder

Tek istekte birden çok emir iletir. Aracı kurum ve hesap bir kez girilir; her emir için yalnızca emre özgü alanlar tekrarlanır.

Rate limit Batch isteğinde her emir kalemi kurumun kota penceresine ayrı sayılır (Marbaş Menkul: dakikada 500 emir). Tüm limitler için Rate limiting bölümüne bakın.

Gövde alanları

Toplu emir gönder — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu (tüm emirler için ortak).
accountNumber zorunlu string Hesap numarası (ortak).
items zorunlu array Emir kalemleri: symbol, quantity, buySell, orderType, price.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/batch \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "items": [
      { "symbol": "FROTO", "quantity": 10, "buySell": 1, "orderType": 2, "price": 101.50 },
      { "symbol": "EREGL", "quantity": 20, "buySell": 2, "orderType": 1, "price": 0 }
    ]
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "items": [
    { "symbol": "FROTO", "quantity": 10, "buySell": 1, "orderType": 2, "price": 101.50 },
    { "symbol": "THYAO", "quantity": 5,  "buySell": 1, "orderType": 2, "price": 250.00 },
    { "symbol": "EREGL", "quantity": 20, "buySell": 2, "orderType": 1, "price": 0 }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "2 orders processed successfully",
  "data": [
    { "symbol": "FROTO", "quantity": 10, "buySell": 1, "orderNo": "12345680", "orderStatus": 1 },
    { "symbol": "EREGL", "quantity": 20, "buySell": 2, "orderNo": "12345681", "orderStatus": 1 }
  ]
}
C# örneğini göster
// Toplu emir gönderir.
public record BatchOrderItem(string Symbol, int Quantity, int BuySell, int OrderType, decimal Price);

public async Task<string> SendOrderBatchAsync(
    string brokerageCode, string accountNumber, IEnumerable<BatchOrderItem> items)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/batch");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { brokerageCode, accountNumber, items }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/orders/update trade

Emir güncelle

Aracı kuruma iletilmiş bekleyen bir emrin miktarını, fiyatını veya emir tipini günceller. Bu işlem aracı kurumun emir güncelleme desteğine bağlıdır.

Piyasa ve limit emri orderType=1 piyasa emridir ve price backend tarafından 0 olarak normalize edilir. orderType=2 limit emridir; bu durumda price 0’dan büyük olmalıdır.
Aracı kurum desteği Emir güncelleme özelliği aracı kuruma bağlıdır. Kurum güncellemeyi desteklemiyorsa yanıt gövdesinde success=false döner; bu durumda emri iptal edip yeniden göndermeniz gerekir.

Gövde alanları

Emir güncelle — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Emrin bulunduğu hesabın aracı kurum kodu.
accountNumber zorunlu string Emrin ait olduğu aracı kurum hesap numarası.
orderNo zorunlu string Gün içi emir listesinden alınan broker emir numarası.
symbol zorunlu string Emrin BIST sembolü (ör. FROTO).
quantity zorunlu integer Emrin güncelleneceği yeni toplam lot miktarı.
previousQuantity zorunlu integer Emrin aracı kurumdaki güncelleme öncesi toplam lot miktarı.
price zorunlu decimal Yeni fiyat. Piyasa emrinde 0, limit emrinde 0’dan büyük olmalıdır.
orderType zorunlu integer 1 = Piyasa, 2 = Limit.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/update \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "orderNo": "305344701",
    "symbol": "FROTO",
    "quantity": 120,
    "previousQuantity": 100,
    "price": 104.50,
    "orderType": 2
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "orderNo": "305344701",
  "symbol": "FROTO",
  "quantity": 120,
  "previousQuantity": 100,
  "price": 104.50,
  "orderType": 2
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Bekleyen bir emri günceller.
public async Task<string> UpdateOrderAsync(
    string brokerageCode, string accountNumber, string orderNo, string symbol,
    int quantity, int previousQuantity, decimal price, int orderType)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/update");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new {
            brokerageCode, accountNumber, orderNo, symbol,
            quantity, previousQuantity, price, orderType
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
PATCH /api/v1/orders/patch trade

Emri kısmi güncelle

Emrin yalnızca gönderilen yeni fiyat, yeni miktar veya yeni emir tipi alanlarını değiştirir. Gönderilmeyen değerler Robot.Api tarafından aracı kurumdan okunup korunur.

Kısmi güncelleme newQuantity, newPrice ve newOrderType alanlarından en az biri gönderilmelidir. Gönderilmeyen emir alanları aracı kurumdan okunup aynı değerle yeniden iletilir.
Mevcut miktar kontrolü quantity yeni miktar değildir. İstemcinin son gördüğü mevcut miktardır. Brokerdaki miktar değişmişse istek reddedilir; güncel emri okuyup yeniden deneyin.

Gövde alanları

Emri kısmi güncelle — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Emrin bulunduğu hesabın aracı kurum kodu.
accountNumber zorunlu string Emrin ait olduğu aracı kurum hesap numarası.
orderNo zorunlu string Gün içi emir listesinden alınan broker emir numarası.
quantity zorunlu integer İstemcinin son gördüğü mevcut toplam miktar; eşzamanlılık kontrolü için kullanılır.
newQuantity integer Yeni toplam miktar. Miktarı korumak için göndermeyin.
newPrice decimal Yeni fiyat. Fiyatı korumak için göndermeyin.
newOrderType integer Yeni emir tipi: 1 = Piyasa, 2 = Limit. Tipi korumak için göndermeyin.
İstekcURL
curl -X PATCH https://api.tradewize.com.tr/api/v1/orders/patch   -H "Authorization: Bearer <access_token>"   -H "Content-Type: application/json"   -d '{
    "brokerageCode": "MARBAS",
    "accountNumber": "77777",
    "orderNo": "305344701",
    "quantity": 100,
    "newPrice": 123.00
  }'
GövdeJSON
{
  "brokerageCode": "MARBAS",
  "accountNumber": "77777",
  "orderNo": "305344701",
  "quantity": 100,
  "newPrice": 123.00
}
Yanıt · 200JSON
{
  "success": true,
  "message": "Order patched.",
  "data": true
}
C# örneğini göster
// Yalnızca fiyatı değiştirir.
var request = new HttpRequestMessage(HttpMethod.Patch, "/api/v1/orders/patch");
request.Headers.Authorization = await GetAuthHeaderAsync();
request.Content = new StringContent(
    JsonSerializer.Serialize(new {
        brokerageCode = "MARBAS",
        accountNumber = "77777",
        orderNo = "305344701",
        quantity = 100,
        newPrice = 123.00m
    }),
    Encoding.UTF8, "application/json");

var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
POST /api/v1/orders/cancel trade

Emir iptal et

Var olan bir emri iptal eder.

Gövde alanları

Emir iptal et — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
orderNo zorunlu string İptal edilecek emrin numarası.
symbol zorunlu string Emrin sembolü.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/cancel \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode": "TradeWiseYatirim", "accountNumber": "77777", "orderNo": "12345678", "symbol": "FROTO"}'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "orderNo": "12345678",
  "symbol": "FROTO"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Emir iptal eder.
public async Task<string> CancelOrderAsync(
    string brokerageCode, string accountNumber, string orderNo, string symbol)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/cancel");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { brokerageCode, accountNumber, orderNo, symbol }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/orders/cancel/batch trade

Toplu emir iptali

Tek istekte birden çok emri iptal eder. Aracı kurum ve hesap bir kez girilir; her iptal için yalnızca orderNo ve symbol tekrarlanır.

Gövde alanları

Toplu emir iptali — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu (ortak).
accountNumber zorunlu string Hesap numarası (ortak).
items zorunlu array İptal kalemleri: orderNo, symbol.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/cancel/batch \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "items": [
      { "orderNo": "12345678", "symbol": "FROTO" },
      { "orderNo": "12345679", "symbol": "THYAO" }
    ]
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "items": [
    { "orderNo": "12345678", "symbol": "FROTO" },
    { "orderNo": "12345679", "symbol": "THYAO" }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Toplu emir iptali.
public record CancelBatchItem(string OrderNo, string Symbol);

public async Task<string> CancelOrderBatchAsync(
    string brokerageCode, string accountNumber, IEnumerable<CancelBatchItem> items)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/cancel/batch");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { brokerageCode, accountNumber, items }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

VİOP Emir ve Portföy

Marbaş Menkul VİOP hesaplarında temel emir ve portföy işlemleri. Hesabın VİOP özelliği etkin olmalıdır. OCO bu API grubunun kapsamında değildir.

9 endpoint
POST /api/v1/orders/viop trade

VİOP emri gönder

Tek bir VİOP limit veya piyasadan limite emri iletir. Başarılı yanıt, broker emir numarasını ve ilk durumunu döndürür.

Gerçek emir Test API’si sandbox değildir. Bu istek bağlı gerçek VİOP hesabına emir iletir.
Emir yöntemi LMT için price sıfırdan büyük olmalıdır. PYL piyasadan limite emridir ve price=0 gönderilir.
Akşam seansı Pay vadeli ve opsiyon sözleşmelerinde eveningSession=false kullanın. Akşam seansı yalnız uygun X ailesi sözleşmelerinde desteklenir.

Başlıklar

VİOP emri gönder — Başlıklar
Alan Tip Açıklama
Idempotency-Key string Tekrar denemelerde aynı broker işlemini almak için önerilir. 8-64 ASCII harf, rakam, nokta, alt çizgi veya tire.

Gövde alanları

VİOP emri gönder — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
contractCode zorunlu string Broker sözleşme kodu. Örnek: F_SASA1226.
buySell zorunlu integer 1 = Alış, 2 = Satış.
quantity zorunlu integer Sözleşme adedi. 1 ile 1.000.000 arasında olmalıdır.
price zorunlu decimal LMT için sıfırdan büyük limit fiyatı; PYL için 0.
orderMethod zorunlu string LMT = Limit, PYL = Piyasadan limite.
eveningSession boolean Akşam seansı talebi. Yalnız akşam seansına uygun X ailesi sözleşmelerinde true olabilir.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop \
  -H "Authorization: Bearer <access_token>" \
  -H "Idempotency-Key: viop-order-20260930-0001" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "MarbasMenkul",
    "accountNumber": "77777",
    "contractCode": "F_SASA1226",
    "buySell": 1,
    "quantity": 1,
    "price": 45.50,
    "orderMethod": "LMT",
    "eveningSession": false
  }'
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777",
  "contractCode": "F_SASA1226",
  "buySell": 1,
  "quantity": 1,
  "price": 45.50,
  "orderMethod": "LMT",
  "eveningSession": false
}
Yanıt · 200JSON
{
  "success": true,
  "message": "VİOP emri aracı kuruma iletildi.",
  "data": {
    "orderNo": "987654321",
    "status": "SentToExchange",
    "statusDescription": "Borsaya iletildi"
  },
  "clientRequestId": "viop-order-20260930-0001"
}
C# örneğini göster
// Tek VİOP limit alış emri.
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/orders/viop");
request.Headers.Authorization = await GetAuthHeaderAsync();
request.Headers.Add("Idempotency-Key", "viop-" + Guid.NewGuid().ToString("N"));
request.Content = JsonContent.Create(new {
    brokerageCode = "MarbasMenkul",
    accountNumber = "77777",
    contractCode = "F_SASA1226",
    buySell = 1,
    quantity = 1,
    price = 45.50m,
    orderMethod = "LMT",
    eveningSession = false
});
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
POST /api/v1/orders/viop/batch trade

Toplu VİOP emri gönder

Aynı VİOP hesabı için 1-20 emri sıralı olarak işler. Her kalem ayrı broker isteği ve ayrı sonuç üretir; bir kalemin reddi diğer sonuçların görünmesini engellemez.

Kısmi sonuç HTTP 200 yanıtında success=false veya code=viop_batch_partial görülebilir. Her items kaydını ayrı değerlendirin.
Idempotency Aynı kök Idempotency-Key ve aynı payload tekrarlandığında her kalem için aynı türetilmiş anahtar kullanılır.

Başlıklar

Toplu VİOP emri gönder — Başlıklar
Alan Tip Açıklama
Idempotency-Key string Tekrar denemelerde aynı broker işlemini almak için önerilir. 8-64 ASCII harf, rakam, nokta, alt çizgi veya tire.

Gövde alanları

Toplu VİOP emri gönder — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
items zorunlu array 1-20 emir. Her kalem contractCode, buySell, quantity, price, orderMethod ve eveningSession içerir.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop/batch \
  -H "Authorization: Bearer <access_token>" \
  -H "Idempotency-Key: viop-batch-20260930-0001" \
  -H "Content-Type: application/json" \
  --data-binary @viop-batch.json
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777",
  "items": [
    {
      "contractCode": "F_SASA1226",
      "buySell": 1,
      "quantity": 1,
      "price": 45.50,
      "orderMethod": "LMT",
      "eveningSession": false
    },
    {
      "contractCode": "F_THYAO1226",
      "buySell": 2,
      "quantity": 1,
      "price": 0,
      "orderMethod": "PYL",
      "eveningSession": false
    }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "All VIOP batch operations were accepted.",
  "data": {
    "totalCount": 2,
    "successfulCount": 2,
    "failedCount": 0,
    "items": [
      {
        "index": 0,
        "clientRequestId": "viop-00-...",
        "success": true,
        "code": null,
        "message": "VİOP emri aracı kuruma iletildi.",
        "order": { "orderNo": "987654321", "status": "SentToExchange" }
      },
      {
        "index": 1,
        "clientRequestId": "viop-01-...",
        "success": true,
        "code": null,
        "message": "VİOP emri aracı kuruma iletildi.",
        "order": { "orderNo": "987654322", "status": "SentToExchange" }
      }
    ]
  },
  "clientRequestId": "viop-batch-20260930-0001"
}
POST /api/v1/orders/viop/update trade

VİOP emrini güncelle

Bekleyen bir VİOP emrinin miktarını, fiyatını veya yöntemini günceller. Gün içi emir listesindeki güncel satır bilgileri temel alınmalıdır.

Güncel emir satırını kullanın contractCode, yön, previousQuantity, yöntem, seans ve kimlik alanlarını /today yanıtındaki son değerlerle gönderin.

Başlıklar

VİOP emrini güncelle — Başlıklar
Alan Tip Açıklama
Idempotency-Key string Tekrar denemelerde aynı broker işlemini almak için önerilir. 8-64 ASCII harf, rakam, nokta, alt çizgi veya tire.

Gövde alanları

VİOP emrini güncelle — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
contractCode zorunlu string Broker sözleşme kodu. Örnek: F_SASA1226.
buySell zorunlu integer 1 = Alış, 2 = Satış.
quantity zorunlu integer Sözleşme adedi. 1 ile 1.000.000 arasında olmalıdır.
price zorunlu decimal LMT için sıfırdan büyük limit fiyatı; PYL için 0.
orderMethod zorunlu string LMT = Limit, PYL = Piyasadan limite.
eveningSession boolean Akşam seansı talebi. Yalnız akşam seansına uygun X ailesi sözleşmelerinde true olabilir.
previousQuantity zorunlu integer Brokerdaki mevcut toplam miktar. quantity alanı yeni toplam miktardır.
orderNumber string Gün içi VİOP emir listesindeki emir numarası.
ordinoNumber string Gün içi VİOP emir listesindeki ordino/kayıt numarası.
exchangeOrderNumber string Borsa emir numarası. Üç kimlik alanından en az biri zorunludur.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop/update \
  -H "Authorization: Bearer <access_token>" \
  -H "Idempotency-Key: viop-update-20260930-0001" \
  -H "Content-Type: application/json" \
  --data-binary @viop-update.json
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777",
  "contractCode": "F_SASA1226",
  "buySell": 1,
  "quantity": 2,
  "previousQuantity": 1,
  "price": 46.00,
  "orderMethod": "LMT",
  "eveningSession": false,
  "orderNumber": "987654321",
  "ordinoNumber": "456789",
  "exchangeOrderNumber": ""
}
Yanıt · 200JSON
{
  "success": true,
  "message": "VİOP emri aracı kuruma iletildi.",
  "data": {
    "orderNo": "987654321",
    "status": "ReplacementRequested",
    "statusDescription": "Değişiklik talebi iletildi"
  },
  "clientRequestId": "viop-update-20260930-0001"
}
POST /api/v1/orders/viop/cancel trade

VİOP emrini iptal et

Bekleyen bir VİOP emri için iptal talebi iletir.

İptal tamamlanması Başarılı mutasyon yanıtı talebin iletildiğini gösterir. Kesin durumu /today endpoint’inden izleyin.

Başlıklar

VİOP emrini iptal et — Başlıklar
Alan Tip Açıklama
Idempotency-Key string Tekrar denemelerde aynı broker işlemini almak için önerilir. 8-64 ASCII harf, rakam, nokta, alt çizgi veya tire.

Gövde alanları

VİOP emrini iptal et — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
contractCode zorunlu string Broker sözleşme kodu. Örnek: F_SASA1226.
buySell zorunlu integer 1 = Alış, 2 = Satış.
quantity zorunlu integer Sözleşme adedi. 1 ile 1.000.000 arasında olmalıdır.
price zorunlu decimal LMT için sıfırdan büyük limit fiyatı; PYL için 0.
orderMethod zorunlu string LMT = Limit, PYL = Piyasadan limite.
eveningSession boolean Akşam seansı talebi. Yalnız akşam seansına uygun X ailesi sözleşmelerinde true olabilir.
orderNumber string Gün içi VİOP emir listesindeki emir numarası.
ordinoNumber string Gün içi VİOP emir listesindeki ordino/kayıt numarası.
exchangeOrderNumber string Borsa emir numarası. Üç kimlik alanından en az biri zorunludur.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop/cancel \
  -H "Authorization: Bearer <access_token>" \
  -H "Idempotency-Key: viop-cancel-20260930-0001" \
  -H "Content-Type: application/json" \
  --data-binary @viop-cancel.json
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777",
  "contractCode": "F_SASA1226",
  "buySell": 1,
  "quantity": 1,
  "price": 45.50,
  "orderMethod": "LMT",
  "eveningSession": false,
  "orderNumber": "987654321",
  "ordinoNumber": "456789",
  "exchangeOrderNumber": ""
}
Yanıt · 200JSON
{
  "success": true,
  "message": "VİOP emri aracı kuruma iletildi.",
  "data": {
    "orderNo": "987654321",
    "status": "CancelRequestSentToExchange",
    "statusDescription": "İptal talebi borsaya iletildi"
  },
  "clientRequestId": "viop-cancel-20260930-0001"
}
POST /api/v1/orders/viop/cancel/batch trade

Toplu VİOP emri iptal et

Aynı hesapta 1-20 VİOP emrinin iptal talebini sıralı işler ve her kalem için ayrı sonuç döndürür.

Başlıklar

Toplu VİOP emri iptal et — Başlıklar
Alan Tip Açıklama
Idempotency-Key string Tekrar denemelerde aynı broker işlemini almak için önerilir. 8-64 ASCII harf, rakam, nokta, alt çizgi veya tire.

Gövde alanları

Toplu VİOP emri iptal et — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
items zorunlu array 1-20 iptal kalemi. Her kalem güncel emir satırındaki sözleşme, yön, miktar, fiyat, yöntem, seans ve kimlikleri içerir.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop/cancel/batch \
  -H "Authorization: Bearer <access_token>" \
  -H "Idempotency-Key: viop-cancel-batch-20260930-0001" \
  -H "Content-Type: application/json" \
  --data-binary @viop-cancel-batch.json
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777",
  "items": [
    {
      "contractCode": "F_SASA1226",
      "buySell": 1,
      "quantity": 1,
      "price": 45.50,
      "orderMethod": "LMT",
      "eveningSession": false,
      "orderNumber": "987654321",
      "ordinoNumber": "456789",
      "exchangeOrderNumber": ""
    }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "All VIOP batch operations were accepted.",
  "data": {
    "totalCount": 1,
    "successfulCount": 1,
    "failedCount": 0,
    "items": [
      {
        "index": 0,
        "success": true,
        "message": "VİOP emri aracı kuruma iletildi.",
        "order": { "orderNo": "987654321", "status": "CancelRequestSentToExchange" }
      }
    ]
  },
  "clientRequestId": "viop-cancel-batch-20260930-0001"
}
POST /api/v1/orders/viop/today portfolio

Gün içi VİOP emirlerini listele

Hesabın gün içi VİOP emirlerini, durumlarını ve güncelleme/iptalde kullanılacak üç emir kimliğini döndürür.

Durum değerleri PendingExchange, SentToExchange, Completed, Rejected, Cancelled, ReplacementRequested ve diğer broker durumları metin olarak döner.
Hız sınırı Aynı hesap numarası ve endpoint için 3 saniyede 1 istek uygulanır.

Gövde alanları

Gün içi VİOP emirlerini listele — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/orders/viop/today \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode":"MarbasMenkul","accountNumber":"77777"}'
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem başarılı.",
  "data": {
    "fetchedAtUtc": "2026-09-30T10:15:00Z",
    "orders": [
      {
        "orderNumber": "987654321",
        "ordinoNumber": "456789",
        "exchangeOrderNumber": "11223344",
        "contractCode": "F_SASA1226",
        "buySell": 1,
        "quantity": 1,
        "remainingQuantity": 1,
        "price": 45.50,
        "orderMethod": "LMT",
        "durationType": "GUN",
        "validUntil": null,
        "status": "SentToExchange",
        "orderDate": "2026-09-30T13:14:55",
        "eveningSession": false
      }
    ]
  }
}
POST /api/v1/portfolio/viop portfolio

VİOP portföyünü getir

Pozisyonları ve teminat özetini tek yanıtta döndürür. İki bölüm bağımsız okunduğu için kısmi başarı mümkündür.

Kısmi başarı code=viop_portfolio_partial olduğunda positionsAvailable ve collateralAvailable alanlarını kontrol edin; alınamayan bölümün güvenli açıklaması ilgili error alanındadır.
Hız sınırı Aynı hesap numarası ve endpoint için 3 saniyede 1 istek uygulanır.

Gövde alanları

VİOP portföyünü getir — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/portfolio/viop \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode":"MarbasMenkul","accountNumber":"77777"}'
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem başarılı.",
  "data": {
    "fetchedAtUtc": "2026-09-30T10:15:00Z",
    "positions": [
      {
        "contractCode": "F_SASA1226",
        "netPosition": 1,
        "openingLongSettlementQuantity": 0,
        "openingShortSettlementQuantity": 0,
        "openingFifoCost": 45.50,
        "fifoCost": 45.50
      }
    ],
    "collateral": {
      "openingRequiredCollateral": 0,
      "takasbankCashCollateral": 500,
      "requiredCollateral": 125,
      "t1WithdrawableCollateral": 375,
      "availableBalance": 375,
      "takasbankRiskLevel": "",
      "optionValue": 0,
      "physicalDeliveryCollateral": 0,
      "sessionOpeningCollateral": 0
    },
    "positionsAvailable": true,
    "collateralAvailable": true,
    "positionsError": null,
    "collateralError": null
  }
}
C# örneğini göster
// VİOP pozisyon + teminat özeti.
var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/portfolio/viop");
request.Headers.Authorization = await GetAuthHeaderAsync();
request.Content = JsonContent.Create(new {
    brokerageCode = "MarbasMenkul",
    accountNumber = "77777"
});
var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
POST /api/v1/portfolio/viop/positions portfolio

VİOP pozisyonlarını getir

Birleşik portföy yanıtından yalnız açık VİOP pozisyonlarını döndürür.

Hız sınırı Aynı hesap numarası ve endpoint için 3 saniyede 1 istek uygulanır.

Gövde alanları

VİOP pozisyonlarını getir — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/portfolio/viop/positions \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode":"MarbasMenkul","accountNumber":"77777"}'
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "VIOP positions retrieved.",
  "data": [
    {
      "contractCode": "F_SASA1226",
      "netPosition": 1,
      "openingLongSettlementQuantity": 0,
      "openingShortSettlementQuantity": 0,
      "openingFifoCost": 45.50,
      "fifoCost": 45.50
    }
  ]
}
POST /api/v1/portfolio/viop/collateral portfolio

VİOP teminatını getir

Birleşik portföy yanıtından yalnız VİOP teminat ve kullanılabilir bakiye özetini döndürür.

Hız sınırı Aynı hesap numarası ve endpoint için 3 saniyede 1 istek uygulanır.

Gövde alanları

VİOP teminatını getir — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Marbaş Menkul için MarbasMenkul gönderilir.
accountNumber zorunlu string Kullanıcıya ait, VİOP özelliği etkin aracı kurum hesap numarası.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/portfolio/viop/collateral \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode":"MarbasMenkul","accountNumber":"77777"}'
GövdeJSON
{
  "brokerageCode": "MarbasMenkul",
  "accountNumber": "77777"
}
Yanıt · 200JSON
{
  "success": true,
  "message": "VIOP collateral retrieved.",
  "data": {
    "openingRequiredCollateral": 0,
    "takasbankCashCollateral": 500,
    "requiredCollateral": 125,
    "t1WithdrawableCollateral": 375,
    "availableBalance": 375,
    "takasbankRiskLevel": "",
    "optionValue": 0,
    "physicalDeliveryCollateral": 0,
    "sessionOpeningCollateral": 0
  }
}

OCO Emirler

OCO (One-Cancels-the-Other): 1 Stop-Loss + kademeli Take-Profit emirlerinden oluşan sentetik gruplar. Borsaya gönderilmez, TradeWize tarafında saklanır; fiyat TP’ye ulaşınca o kademe, SL’ye düşünce tüm grup için piyasa satış tetiklenir. Fiyatlar BIST kademe aralığına uymalıdır.

4 endpoint
GET /api/v1/oco-orders portfolio

OCO emirleri listele

Hesaba ait tüm OCO satırlarını döndürür. Her TP ve SL ayrı bir satır olarak gelir; aynı groupId değerine sahip satırlar tek grubu oluşturur.

orderType: 1 = Take-Profit, 2 = Stop-Loss. status: 1 = Aktif, 2 = Tetiklendi, 3 = Tetikleme başarısız, 4 = İptal edildi.

Sorgu parametreleri

OCO emirleri listele — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/oco-orders?brokerageCode=TradeWiseYatirim&accountNumber=77777" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 1001,
      "groupId": 1001,
      "accountNumber": "77777",
      "symbol": "EREGL",
      "orderType": 2,
      "quantity": 100,
      "price": 21.00,
      "status": 1,
      "triggeredPrice": null,
      "triggeredDate": null,
      "dueDate": null,
      "notes": null,
      "createdDate": "2026-07-06T09:00:00Z",
      "updatedDate": null
    },
    {
      "id": 1002,
      "groupId": 1001,
      "accountNumber": "77777",
      "symbol": "EREGL",
      "orderType": 1,
      "quantity": 40,
      "price": 22.20,
      "status": 1,
      "createdDate": "2026-07-06T09:00:00Z"
    }
  ]
}
C# örneğini göster
// Hesabın OCO emir satırlarını listeler.
public async Task<string> GetOcoOrdersAsync(string brokerageCode, string accountNumber)
{
    var url = $"/api/v1/oco-orders?brokerageCode={Uri.EscapeDataString(brokerageCode)}" +
              $"&accountNumber={Uri.EscapeDataString(accountNumber)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/oco-orders trade

OCO emir grubu oluştur

1 Stop-Loss + en az 1 Take-Profit kademesinden oluşan yeni bir OCO grubu oluşturur. Tüm TP fiyatları SL fiyatından yüksek olmalıdır.

BIST fiyat kademeleri Fiyat adımı fiyata göre değişir: 0,01–19,99 → 0,01 · 20–49,99 → 0,02 · 50–99,99 → 0,05 · 100–249,99 → 0,10 · 250–499,99 → 0,25 · 500–999,99 → 0,50. Kademeye uymayan fiyat 400 döner.
Rate limit Emir iletimi kullanıcı + aracı kurum başına kurum kotasına tabidir (Marbaş Menkul: dakikada 500 emir). Tüm limitler için Rate limiting bölümüne bakın.

Gövde alanları

OCO emir grubu oluştur — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
symbol zorunlu string Hisse kodu (örn. "EREGL").
stopLossPrice zorunlu decimal Zarar kes fiyatı. BIST kademesine uygun, tüm TP’lerden düşük.
stopLossQuantity zorunlu integer Stop-Loss lot adedi.
takeProfitItems zorunlu array Kademeler: { price, quantity }. En az 1 adet.
dueDate datetime Bu tarihten sonra emirler pasife alınır.
notes string Serbest not.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/oco-orders \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "symbol": "EREGL",
    "stopLossPrice": 21.00,
    "stopLossQuantity": 100,
    "takeProfitItems": [
      { "price": 22.20, "quantity": 40 },
      { "price": 24.00, "quantity": 60 }
    ]
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "symbol": "EREGL",
  "stopLossPrice": 21.00,
  "stopLossQuantity": 100,
  "takeProfitItems": [
    { "price": 22.20, "quantity": 40 },
    { "price": 23.00, "quantity": 40 },
    { "price": 24.00, "quantity": 20 }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 1042,
    "groupId": 1042,
    "accountNumber": "77777",
    "symbol": "EREGL",
    "orderType": 2,
    "quantity": 100,
    "price": 21.00,
    "status": 1,
    "createdDate": "2026-07-06T14:00:00Z"
  }
}
C# örneğini göster
// OCO grubu oluşturur (1 SL + kademeli TP).
public record TakeProfitItem(decimal Price, int Quantity);

public async Task<string> CreateOcoOrderAsync(
    string brokerageCode, string accountNumber, string symbol,
    decimal stopLossPrice, int stopLossQuantity, IEnumerable<TakeProfitItem> takeProfitItems)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/oco-orders");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new
        {
            brokerageCode, accountNumber, symbol,
            stopLossPrice, stopLossQuantity, takeProfitItems
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/oco-orders/register-pending trade

Bekleyen OCO bağlantısı kaydet

Bir broker emrine OCO bağlar. Emir Completed olduğunda gerçekleşme fiyatı üzerinden SL/TP fiyatları otomatik hesaplanır. SL ve her TP için yüzde (percent) VEYA fiyat (price) girin.

Yanıttaki data, oluşturulan bağlantının kimliğidir (setupId). SL/TP için percent ve price aynı anda verilemez; en az biri girilmelidir.
Rate limit Emir iletimi kullanıcı + aracı kurum başına kurum kotasına tabidir (Marbaş Menkul: dakikada 500 emir). Tüm limitler için Rate limiting bölümüne bakın.

Gövde alanları

Bekleyen OCO bağlantısı kaydet — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
brokerOrderNo zorunlu string OCO’nun bağlanacağı broker emir numarası.
symbol zorunlu string Hisse kodu.
stopLossQuantity zorunlu integer Stop-Loss lot adedi.
stopLossPercent decimal SL yüzdesi. stopLossPrice ile birlikte verilemez; biri zorunlu.
stopLossPrice decimal Sabit SL fiyatı (BIST kademesine uygun). stopLossPercent ile birlikte verilemez.
takeProfitItems zorunlu array Kademeler: { quantity, percent | price }. En az 1 adet.
dueDate datetime Bu tarihten sonra satırlar pasife alınır.
notes string Serbest not.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/oco-orders/register-pending \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "brokerageCode": "TradeWiseYatirim",
    "accountNumber": "77777",
    "brokerOrderNo": "12345678",
    "symbol": "EREGL",
    "stopLossQuantity": 100,
    "stopLossPercent": 3,
    "takeProfitItems": [
      { "quantity": 60, "percent": 4.5 },
      { "quantity": 40, "price": 23.00 }
    ]
  }'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "brokerOrderNo": "12345678",
  "symbol": "EREGL",
  "stopLossQuantity": 100,
  "stopLossPercent": 3,
  "takeProfitItems": [
    { "quantity": 40, "percent": 4.5 },
    { "quantity": 40, "price": 23.00 },
    { "quantity": 20, "percent": 8 }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": 5012
}
C# örneğini göster
// Broker emrine bekleyen OCO bağlar. SL/TP için percent VEYA price girin.
public async Task<string> RegisterPendingOcoOrderAsync(object body)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/oco-orders/register-pending");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

// Kullanım
await client.RegisterPendingOcoOrderAsync(new
{
    brokerageCode = "TradeWiseYatirim",
    accountNumber = "77777",
    brokerOrderNo = "12345678",
    symbol = "EREGL",
    stopLossQuantity = 100,
    stopLossPercent = 3,
    takeProfitItems = new object[]
    {
        new { quantity = 60, percent = 4.5 },
        new { quantity = 40, price = 23.00 }
    }
});
DELETE /api/v1/oco-orders/{id} trade

OCO grubunu iptal et

Belirtilen satırın ait olduğu OCO grubundaki tüm aktif emirleri iptal eder.

Yol parametreleri

OCO grubunu iptal et — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer İptal edilecek OCO satırının/grubunun kimliği.

Sorgu parametreleri

OCO grubunu iptal et — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
İstekcURL
curl -X DELETE "https://api.tradewize.com.tr/api/v1/oco-orders/1042?brokerageCode=TradeWiseYatirim" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// OCO grubunu iptal eder.
public async Task<string> CancelOcoOrderAsync(int id, string brokerageCode)
{
    var url = $"/api/v1/oco-orders/{id}?brokerageCode={Uri.EscapeDataString(brokerageCode)}";
    var request = new HttpRequestMessage(HttpMethod.Delete, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

Sistemler

Sistemler, bir hesaba bağlı işlem botlarının üst kümesidir. Bu uç tüm bot tiplerini tek listede döndürür (finansal performans metrikleri hariç). botType: 1 = GridBot, 2 = TradingViewBot, 3 = StockBot, 4 = SignalBot.

1 endpoint
POST /api/v1/systems/list report

Sistemleri listele

Bir hesaba ait tüm sistemleri (botları) filtreleyerek döndürür.

Gövde alanları

Sistemleri listele — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
botType integer[] Bot tipi filtresi (boş = tümü). 1 GridBot, 2 TradingViewBot, 3 StockBot, 4 SignalBot.
isActive integer 1 = tümü, 2 = yalnızca aktif, 3 = yalnızca pasif. Varsayılan 1.
isDeleted integer 1 = tümü, 2 = silinmemiş, 3 = silinmiş. Varsayılan 2.
startDate datetime Tarih aralığı başlangıcı (opsiyonel).
endDate datetime Tarih aralığı bitişi (opsiyonel).
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/systems/list \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"brokerageCode": "TradeWiseYatirim", "accountNumber": "77777", "botType": [], "isActive": 1, "isDeleted": 2}'
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "botType": [],
  "isActive": 1,
  "isDeleted": 2,
  "startDate": null,
  "endDate": null
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 42,
      "name": "THYAO Level Bot",
      "description": "",
      "isActive": true,
      "botType": 1,
      "isDeleted": false,
      "sourceType": 1,
      "symbolList": ["THYAO"],
      "accountName": "Ana Hesap",
      "accountNumber": "77777",
      "buyGap": 50,
      "sellGap": 50,
      "takeProfit": 200,
      "levelBotDetails": [
        {
          "symbol": "THYAO",
          "maxBuyPrice": 280.00,
          "minBuyPrice": 220.00,
          "maxSellPrice": 300.00,
          "minSellPrice": 230.00,
          "profit": 5,
          "isActive": true
        }
      ]
    }
  ]
}
C# örneğini göster
// Hesaba ait tüm botları (sistemleri) listeler.
public async Task<string> GetSystemsAsync(
    string brokerageCode, string accountNumber, int[]? botType = null,
    int isActive = 1, int isDeleted = 2)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/systems/list");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new
        {
            brokerageCode, accountNumber, botType = botType ?? Array.Empty<int>(),
            isActive, isDeleted
        }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

GridBot’lar

GridBot, belirli fiyat seviyelerinde otomatik alım-satım yapan bottur. Her bot birden çok sembol için bağımsız konfigürasyon içerebilir. Fiyat limitleri konfigürasyondur; gerçek işlem fiyatları ve komisyonlar yanıtlarda paylaşılmaz.

6 endpoint
GET /api/v1/level-bots report

GridBot’ları listele

Hesaba ait tüm GridBot’ları döndürür.

Sorgu parametreleri

GridBot’ları listele — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
withPassive integer Pasif botları dahil et. 1 = evet, 0 = hayır. Varsayılan 1.
withDeleted integer Silinmiş botları dahil et. 1 = evet, 0 = hayır. Varsayılan 1.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/level-bots?brokerageCode=TradeWiseYatirim&accountNumber=77777&withPassive=1&withDeleted=0" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 42,
      "name": "THYAO-EREGL Stratejisi",
      "description": "",
      "isActive": true,
      "botType": 1,
      "accountNumber": "77777",
      "levelBotType": 1,
      "levelType": 1,
      "buyGap": 50,
      "sellGap": 50,
      "targetProfit": 200,
      "levelBotDetails": [
        {
          "id": 501,
          "symbol": "THYAO",
          "maxBuyPrice": 280.00,
          "minBuyPrice": 220.00,
          "maxSellPrice": 300.00,
          "minSellPrice": 230.00,
          "buyQuantity": 100,
          "sellQuantity": 100,
          "profit": 5,
          "isActive": true
        }
      ]
    }
  ]
}
C# örneğini göster
// Hesaba ait Level Bot'ları listeler.
public async Task<string> GetLevelBotsAsync(
    string brokerageCode, string accountNumber, int withPassive = 1, int withDeleted = 1)
{
    var url = $"/api/v1/level-bots?brokerageCode={Uri.EscapeDataString(brokerageCode)}" +
              $"&accountNumber={Uri.EscapeDataString(accountNumber)}" +
              $"&withPassive={withPassive}&withDeleted={withDeleted}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/level-bots/{id} report

GridBot getir

ID ile tek bir GridBot’un tüm konfigürasyonunu döndürür.

Yol parametreleri

GridBot getir — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer GridBot kimliği.

Sorgu parametreleri

GridBot getir — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/level-bots/42?brokerageCode=TradeWiseYatirim" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 42,
    "name": "THYAO-EREGL Stratejisi",
    "isActive": true,
    "botType": 1,
    "accountNumber": "77777",
    "levelBotDetails": [
      { "id": 501, "symbol": "THYAO", "maxBuyPrice": 280.00, "minBuyPrice": 220.00, "profit": 5, "isActive": true }
    ]
  }
}
C# örneğini göster
// ID ile Level Bot getirir.
public async Task<string> GetLevelBotAsync(int id, string brokerageCode)
{
    var url = $"/api/v1/level-bots/{id}?brokerageCode={Uri.EscapeDataString(brokerageCode)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/level-bots manage

GridBot oluştur

Yeni bir GridBot oluşturur. GridBotDetails içinde her sembol için fiyat limitleri ve adetler tanımlanır.

Gövde alanları

GridBot oluştur — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
name zorunlu string Bot adı.
isActive zorunlu boolean Bot aktif mi?
sourceType zorunlu integer 1 = sembol listesi, 2 = liste, 3 = tarama.
levelBotDetails zorunlu array Sembol konfigürasyonları: symbol, maxBuyPrice, minBuyPrice, maxSellPrice, minSellPrice, buyQuantity, sellQuantity, profit, isActive.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/level-bots \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d @level-bot.json
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "name": "THYAO Alım-Satım Botu",
  "description": "",
  "isActive": true,
  "sourceType": 1,
  "symbolList": ["THYAO"],
  "levelBotType": 1,
  "levelType": 1,
  "buyGap": 50,
  "sellGap": 50,
  "targetProfit": 200,
  "botStartTimeString": "10:00",
  "botEndTimeString": "18:00",
  "levelBotDetails": [
    {
      "symbol": "THYAO",
      "maxBuyPrice": 280.00,
      "minBuyPrice": 220.00,
      "maxSellPrice": 300.00,
      "minSellPrice": 230.00,
      "buyQuantity": 100,
      "sellQuantity": 100,
      "profit": 5,
      "isActive": true
    }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 43,
    "name": "THYAO Alım-Satım Botu",
    "isActive": true,
    "accountNumber": "77777"
  }
}
C# örneğini göster
// Yeni Level Bot oluşturur. Tam gövdeyi anonim nesne olarak geçirin.
public async Task<string> CreateLevelBotAsync(object body)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/level-bots");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
PUT /api/v1/level-bots/{id} manage

GridBot güncelle

Var olan GridBot’u URL’deki kimlik üzerinden kısmi olarak günceller. Fiyat sınırları ve kâr alanlarının güncellenmesi düzeltildi; gönderilmeyen bot ve detay alanları mevcut değerlerini korur.

Önerilen rota PUT /api/v1/level-bots/{id} rotasıdır. Geriye uyumluluk için PUT /api/v1/level-bots desteklenmeye devam eder; legacy rotada root id gövdede zorunludur.
Kısmi güncelleme Mevcut detay satırı id ile eşleştirilir. maxBuyPrice, minBuyPrice, maxSellPrice, minSellPrice ve profit alanları güncellenebilir; gönderilmeyen değerler 0 veya false ile ezilmez. Test ortamındaki istekler de gerçek bot ayarlarını değiştirir.
Root id GridBot kimliğidir; GridBotDetails[].id ise detail satırı kimliğidir. Canonical rotada root id opsiyoneldir, ancak gönderilirse path ID ile aynı olmalıdır. Çakışma 400 döndürür.
targetProfit root parent alanı, profit ise detail alanıdır. Her ikisi de tam sayı semantiğine sahiptir: 5 ve 5.0 kabul edilir, 5.5 reddedilir.

Yol parametreleri

GridBot güncelle — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Güncellenecek GridBot kimliği (bot ID).

Gövde alanları

GridBot güncelle — Gövde alanları
Alan Tip Açıklama
id (body) integer Opsiyonel root bot ID. Gönderilirse path ID ile aynı olmalıdır; farklıysa 400 döner.
brokerageCode zorunlu string Aracı kurum kodu.
name string Yeni bot adı.
isActive boolean Bot aktif mi?
buyGap / sellGap integer Bot seviyesindeki alış/satış aralıkları. Atlanırsa mevcut değerler korunur.
targetProfit number Bot genelindeki hedef kâr. Root parent alanıdır ve tam sayı değerli olmalıdır.
levelBotDetails array Sembol konfigürasyonları nested olarak gönderilir. Mevcut satırlar detail id ile eşleştirilir; atlanan detail alanları korunur.
İstekcURL
curl -X PUT https://api.tradewize.com.tr/api/v1/level-bots/43 \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d @level-bot-update.json
GövdeJSON
{
  "id": 43,
  "brokerageCode": "TradeWiseYatirim",
  "name": "THYAO Güncellenmiş Bot",
  "isActive": true,
  "buyGap": 2,
  "sellGap": 6,
  "targetProfit": 5,
  "levelBotDetails": [
    {
      "id": 501,
      "levelBotId": 43,
      "symbol": "THYAO",
      "maxBuyPrice": 290.00,
      "minBuyPrice": 210.00,
      "maxSellPrice": 310.00,
      "minSellPrice": 225.00,
      "buyQuantity": 100,
      "sellQuantity": 100,
      "profit": 5,
      "isActive": true
    }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 43,
    "name": "THYAO Güncellenmiş Bot",
    "isActive": true,
    "accountNumber": "77777",
    "sourceType": 1,
    "symbolList": ["THYAO"],
    "buyGap": 2,
    "sellGap": 6,
    "targetProfit": 5,
    "levelBotDetails": [
      {
        "id": 501,
        "levelBotId": 43,
        "symbol": "THYAO",
        "maxBuyPrice": 290.00,
        "minBuyPrice": 210.00,
        "maxSellPrice": 310.00,
        "minSellPrice": 225.00,
        "buyQuantity": 100,
        "sellQuantity": 100,
        "profit": 5,
        "isActive": true
      }
    ]
  }
}
C# örneğini göster
// Var olan Level Bot'u canonical path ID rotasıyla kısmi günceller.
public async Task<string> UpdateLevelBotAsync(int id, object body)
{
    var request = new HttpRequestMessage(HttpMethod.Put, $"/api/v1/level-bots/{id}");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/level-bots/{id}/pair-orders report

Aktif çift emirler

Bir GridBot’un bekleyen/işlemdeki çift emirlerini döndürür. Gerçek işlem fiyatları ve komisyonlar paylaşılmaz.

buyStatus / sellStatus: 1 = beklemede, 2 = emir gönderildi, 3 = tamamlandı, 4 = iptal, 5 = piyasa satış.

Yol parametreleri

Aktif çift emirler — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer GridBot kimliği.

Sorgu parametreleri

Aktif çift emirler — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/level-bots/42/pair-orders?brokerageCode=TradeWiseYatirim" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 1001,
      "symbol": "THYAO",
      "buyQuantity": 100,
      "buyStatus": 3,
      "buyOrderNo": "305344701",
      "buyOrderTime": "2026-07-06T09:30:00Z",
      "buyCompleteTime": "2026-07-06T09:31:00Z",
      "sellQuantity": 100,
      "sellStatus": 1,
      "sellOrderNo": "",
      "sellOrderTime": null,
      "systemId": 42,
      "accountNumber": "77777",
      "completed": false,
      "description": "Çift emir bekleniyor"
    }
  ]
}
C# örneğini göster
// Level Bot'un aktif çift emirlerini getirir.
public async Task<string> GetLevelBotPairOrdersAsync(int id, string brokerageCode)
{
    var url = $"/api/v1/level-bots/{id}/pair-orders?brokerageCode={Uri.EscapeDataString(brokerageCode)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/level-bots/{id}/transaction-history report

İşlem geçmişi

Bir GridBot’un tamamlanmış işlem geçmişini sayfalı olarak döndürür. Gerçek fiyatlar, komisyon ve kâr rakamları paylaşılmaz.

Yol parametreleri

İşlem geçmişi — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer GridBot kimliği.

Sorgu parametreleri

İşlem geçmişi — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
startDate zorunlu datetime Tarih aralığı başlangıcı (ISO 8601).
endDate zorunlu datetime Tarih aralığı bitişi (ISO 8601).
page integer Sayfa numarası. Varsayılan 1.
pageSize integer Sayfa başına kayıt. Varsayılan 10.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/level-bots/42/transaction-history?brokerageCode=TradeWiseYatirim&startDate=2026-07-01T00:00:00Z&endDate=2026-07-06T23:59:59Z&page=1&pageSize=20" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "items": [
      {
        "symbol": "THYAO",
        "buyQuantity": 100,
        "buyOrderNo": "305344701",
        "buyCompleteTime": "2026-07-04T09:31:00Z",
        "sellQuantity": 100,
        "sellOrderNo": "305344702",
        "sellCompleteTime": "2026-07-04T14:20:00Z",
        "description": "Tamamlandı",
        "hourCount": 5,
        "systemId": 42
      }
    ],
    "totalCount": 125,
    "page": 1,
    "pageSize": 20
  }
}
C# örneğini göster
// Level Bot işlem geçmişini sayfalı getirir.
public async Task<string> GetLevelBotHistoryAsync(
    int id, string brokerageCode, DateTime startDate, DateTime endDate,
    int page = 1, int pageSize = 10)
{
    var url = $"/api/v1/level-bots/{id}/transaction-history" +
              $"?brokerageCode={Uri.EscapeDataString(brokerageCode)}" +
              $"&startDate={startDate:O}&endDate={endDate:O}&page={page}&pageSize={pageSize}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

TradingView Bot’lar

TradingView sinyal botları, TradingView webhook sinyallerini alıp otomatik emir verir. Sinyaller, tanımlı algo adı ve periyoda göre eşleştirilir.

5 endpoint
GET /api/v1/trading-view-bots report

TradingView Bot’ları listele

Hesaba ait tüm TradingView Bot’ları döndürür.

Sorgu parametreleri

TradingView Bot’ları listele — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
withPassive integer Pasif botları dahil et. 1 = evet, 0 = hayır. Varsayılan 1.
withDeleted integer Silinmiş botları dahil et. 1 = evet, 0 = hayır. Varsayılan 1.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/trading-view-bots?brokerageCode=TradeWiseYatirim&accountNumber=77777" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 10,
      "name": "THYAO TradingView",
      "isActive": true,
      "botType": 2,
      "accountNumber": "77777",
      "quantity": 100,
      "stopLoss": 3,
      "takeProfit": 5,
      "tradingViewBotDetails": [
        {
          "id": 700,
          "symbol": "THYAO",
          "maxBuyPrice": 280.00,
          "minBuyPrice": 210.00,
          "maxSellPrice": 300.00,
          "minSellPrice": 220.00,
          "quantity": 100,
          "isActive": true
        }
      ]
    }
  ]
}
C# örneğini göster
// Hesaba ait TradingView Bot'ları listeler.
public async Task<string> GetTradingViewBotsAsync(
    string brokerageCode, string accountNumber, int withPassive = 1, int withDeleted = 1)
{
    var url = $"/api/v1/trading-view-bots?brokerageCode={Uri.EscapeDataString(brokerageCode)}" +
              $"&accountNumber={Uri.EscapeDataString(accountNumber)}" +
              $"&withPassive={withPassive}&withDeleted={withDeleted}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/trading-view-bots/{id} report

TradingView Bot getir

ID ile tek bir TradingView Bot’un konfigürasyonunu döndürür.

Yol parametreleri

TradingView Bot getir — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer TradingView Bot kimliği.

Sorgu parametreleri

TradingView Bot getir — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/trading-view-bots/10?brokerageCode=TradeWiseYatirim" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 10,
    "name": "THYAO TradingView",
    "isActive": true,
    "botType": 2,
    "accountNumber": "77777",
    "quantity": 100,
    "tradingViewBotDetails": [
      { "id": 700, "symbol": "THYAO", "quantity": 100, "isActive": true }
    ]
  }
}
C# örneğini göster
// ID ile TradingView Bot getirir.
public async Task<string> GetTradingViewBotAsync(int id, string brokerageCode)
{
    var url = $"/api/v1/trading-view-bots/{id}?brokerageCode={Uri.EscapeDataString(brokerageCode)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/trading-view-bots manage

TradingView Bot oluştur

Yeni bir TradingView Bot oluşturur. sourceType 0 tüm sinyaller, 1 sembol (detay), 2 liste, 3 tarama anlamına gelir.

Gövde alanları

TradingView Bot oluştur — Gövde alanları
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
name zorunlu string Bot adı.
isActive zorunlu boolean Bot aktif mi?
sourceType zorunlu integer 0 = tüm sinyaller, 1 = sembol, 2 = liste, 3 = tarama.
quantity integer Sinyal başına emir adedi (lot).
tradingViewBotDetails array Sembol konfigürasyonları: symbol, maxBuyPrice, minBuyPrice, maxSellPrice, minSellPrice, quantity, isActive.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/trading-view-bots \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d @tv-bot.json
GövdeJSON
{
  "brokerageCode": "TradeWiseYatirim",
  "accountNumber": "77777",
  "name": "THYAO TradingView",
  "description": "",
  "isActive": true,
  "sourceType": 1,
  "algoId": 12,
  "algoPeriodId": 3,
  "quantity": 100,
  "stopLoss": 3,
  "takeProfit": 5,
  "tradingViewBotDetails": [
    {
      "symbol": "THYAO",
      "maxBuyPrice": 280.00,
      "minBuyPrice": 210.00,
      "maxSellPrice": 300.00,
      "minSellPrice": 220.00,
      "quantity": 100,
      "isActive": true
    }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 11,
    "name": "THYAO TradingView",
    "isActive": true,
    "accountNumber": "77777"
  }
}
C# örneğini göster
// Yeni TradingView Bot oluşturur.
public async Task<string> CreateTradingViewBotAsync(object body)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/trading-view-bots");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
PUT /api/v1/trading-view-bots manage

TradingView Bot güncelle

Var olan bir TradingView Bot’u günceller. Gövde id alanını içerir.

Gövde alanları

TradingView Bot güncelle — Gövde alanları
Alan Tip Açıklama
id zorunlu integer Güncellenecek bot kimliği.
brokerageCode zorunlu string Aracı kurum kodu.
name zorunlu string Bot adı.
isActive zorunlu boolean Bot aktif mi?
tradingViewBotDetails array Güncellenmiş sembol konfigürasyonları (var olan satırlar için id ile).
İstekcURL
curl -X PUT https://api.tradewize.com.tr/api/v1/trading-view-bots \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d @tv-bot-update.json
GövdeJSON
{
  "id": 11,
  "brokerageCode": "TradeWiseYatirim",
  "name": "THYAO TradingView v2",
  "isActive": true,
  "quantity": 150,
  "tradingViewBotDetails": [
    { "id": 700, "symbol": "THYAO", "quantity": 150, "isActive": true }
  ]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Var olan TradingView Bot'u günceller (gövdede id zorunlu).
public async Task<string> UpdateTradingViewBotAsync(object body)
{
    var request = new HttpRequestMessage(HttpMethod.Put, "/api/v1/trading-view-bots");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/trading-view-bots/{id}/pair-orders report

Çift emirler

Bir TradingView Bot’un çift emirlerini hesaba göre döndürür. Gerçek fiyatlar, komisyonlar ve webhook içerikleri paylaşılmaz.

algoName ve period, TradingView webhook sinyaliyle eşleşmelidir. buyStatus / sellStatus: 1 beklemede, 2 gönderildi, 3 tamamlandı, 4 iptal, 5 piyasa satış.

Yol parametreleri

Çift emirler — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer TradingView Bot (sistem) kimliği.

Sorgu parametreleri

Çift emirler — Sorgu parametreleri
Alan Tip Açıklama
brokerageCode zorunlu string Aracı kurum kodu.
accountNumber zorunlu string Hesap numarası.
withPassive integer Tamamlanmış çift emirleri dahil et. 1 = evet, 0 = hayır. Varsayılan 0.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/trading-view-bots/10/pair-orders?brokerageCode=TradeWiseYatirim&accountNumber=77777&withPassive=0" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    {
      "id": 2001,
      "symbol": "THYAO",
      "algoName": "EMA_CROSS",
      "period": "1H",
      "systemId": 10,
      "accountNumber": "77777",
      "quantity": 100,
      "buyStatus": 3,
      "buyOrderNo": "305344801",
      "buyCompleteTime": "2026-07-06T10:00:00Z",
      "sellStatus": 1,
      "sellOrderNo": "",
      "completed": false,
      "description": "Sinyal bekleniyor"
    }
  ]
}
C# örneğini göster
// TradingView Bot'un çift emirlerini getirir.
public async Task<string> GetTradingViewPairOrdersAsync(
    int id, string brokerageCode, string accountNumber, int withPassive = 0)
{
    var url = $"/api/v1/trading-view-bots/{id}/pair-orders" +
              $"?brokerageCode={Uri.EscapeDataString(brokerageCode)}" +
              $"&accountNumber={Uri.EscapeDataString(accountNumber)}&withPassive={withPassive}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

Listeler

Endeks, sektör, pazar ve kullanıcı listeleri. ListType: 1 = Endeks, 2 = Sektör, 3 = Pazar, 4 = Kullanıcı listesi. Okuma report, oluşturma/güncelleme manage kapsamı ister.

11 endpoint
GET /api/v1/lists/indexes report

Endeksleri listele

Tüm endeks listelerini (BIST 30, BIST 100 vb.) özet olarak döndürür.

İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/indexes \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    { "id": 1, "listTypeId": 1, "code": "XU030", "name": "BIST 30", "isActive": true, "symbolCount": 30 },
    { "id": 2, "listTypeId": 1, "code": "XU100", "name": "BIST 100", "isActive": true, "symbolCount": 100 }
  ]
}
C# örneğini göster
// Endeks listelerini getirir. (sektörler/pazarlar için yol değişir)
public async Task<string> GetIndexesAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/v1/lists/indexes");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/lists/indexes/{code} report

Endeks sembollerini getir

Belirli bir endeksin sembollerini döndürür (örn. code = XU030).

Aynı kalıp sektör (/sectors/{code}) ve pazar (/markets/{code}) için de geçerlidir.

Yol parametreleri

Endeks sembollerini getir — Yol parametreleri
Alan Tip Açıklama
code zorunlu string Endeks kodu (örn. "XU030").
İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/indexes/XU030 \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 1,
    "listTypeId": 1,
    "code": "XU030",
    "name": "BIST 30",
    "symbolCount": 30,
    "symbols": [
      { "symbolId": 101, "code": "THYAO", "name": "Türk Hava Yolları", "addedAt": "2026-01-01T00:00:00Z" },
      { "symbolId": 102, "code": "GARAN", "name": "Garanti Bankası", "addedAt": "2026-01-01T00:00:00Z" }
    ]
  }
}
C# örneğini göster
// Bir endeks/sektör/pazarın sembollerini kodla getirir.
public async Task<string> GetIndexByCodeAsync(string code)
{
    var url = $"/api/v1/lists/indexes/{Uri.EscapeDataString(code)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/lists/sectors report

Sektörleri listele

Tüm sektör listelerini (Bankacılık, Sanayi vb.) döndürür. /sectors/{code} sembolleri verir.

İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/sectors \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    { "id": 20, "listTypeId": 2, "code": "BANK", "name": "Bankacılık", "symbolCount": 12 },
    { "id": 21, "listTypeId": 2, "code": "SANAYI", "name": "Sanayi", "symbolCount": 45 }
  ]
}
C# örneğini göster
// Sektör listelerini getirir.
public async Task<string> GetSectorsAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/v1/lists/sectors");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/lists/markets report

Pazarları listele

Tüm pazar listelerini (Yıldız Pazar, Ana Pazar vb.) döndürür. /markets/{code} sembolleri verir.

İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/markets \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    { "id": 30, "listTypeId": 3, "code": "YILDIZ", "name": "Yıldız Pazar", "symbolCount": 120 },
    { "id": 31, "listTypeId": 3, "code": "ANA", "name": "Ana Pazar", "symbolCount": 200 }
  ]
}
C# örneğini göster
// Pazar listelerini getirir.
public async Task<string> GetMarketsAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/v1/lists/markets");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/lists/my report

Kendi listelerim

Kullanıcının kendi oluşturduğu listeleri döndürür.

İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/my \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": [
    { "id": 500, "listTypeId": 4, "code": "USR-500", "name": "Takip Listem", "symbolCount": 8 }
  ]
}
C# örneğini göster
// Kullanıcının kendi listelerini getirir.
public async Task<string> GetMyListsAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "/api/v1/lists/my");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/lists/my/{id} report

Liste detayı

Tek bir kullanıcı listesini sembolleriyle birlikte döndürür.

Yol parametreleri

Liste detayı — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Liste kimliği.
İstekcURL
curl -X GET https://api.tradewize.com.tr/api/v1/lists/my/500 \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": {
    "id": 500,
    "listTypeId": 4,
    "code": "USR-500",
    "name": "Takip Listem",
    "symbolCount": 2,
    "symbols": [
      { "symbolId": 101, "code": "THYAO", "name": "Türk Hava Yolları", "addedAt": "2026-06-01T10:00:00Z" },
      { "symbolId": 205, "code": "ASELS", "name": "Aselsan", "addedAt": "2026-06-02T11:00:00Z" }
    ]
  }
}
C# örneğini göster
// Kullanıcı listesini id ile getirir.
public async Task<string> GetMyListAsync(int id)
{
    var request = new HttpRequestMessage(HttpMethod.Get, $"/api/v1/lists/my/{id}");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/lists/my manage

Liste oluştur

Yeni bir kullanıcı listesi oluşturur. listTypeId kullanıcı listeleri için 4’tür.

Gövde alanları

Liste oluştur — Gövde alanları
Alan Tip Açıklama
listTypeId zorunlu integer Liste tipi. Kullanıcı listesi için 4.
name zorunlu string Liste adı (maks. 150 karakter).
symbolList string[] Başlangıç sembolleri (kod listesi).
isPublic boolean Herkese açık mı? Varsayılan true.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/lists/my \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"listTypeId": 4, "name": "Teknoloji Hisselerim", "symbolList": ["ASELS", "LOGO"]}'
GövdeJSON
{
  "listTypeId": 4,
  "name": "Teknoloji Hisselerim",
  "isPublic": false,
  "symbolList": ["ASELS", "LOGO", "NETAS"]
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": { "id": 501, "code": "USR-501", "name": "Teknoloji Hisselerim", "listTypeId": 4 }
}
C# örneğini göster
// Yeni kullanıcı listesi oluşturur.
public async Task<string> CreateMyListAsync(string name, IEnumerable<string> symbols, bool isPublic = false)
{
    var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/lists/my");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { listTypeId = 4, name, isPublic, symbolList = symbols }),
        Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
PUT /api/v1/lists/my/{id} manage

Liste güncelle

Var olan bir kullanıcı listesini günceller (ad, görünürlük vb.).

Yol parametreleri

Liste güncelle — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Liste kimliği.

Gövde alanları

Liste güncelle — Gövde alanları
Alan Tip Açıklama
name zorunlu string Yeni liste adı.
listTypeId zorunlu integer Liste tipi (4).
İstekcURL
curl -X PUT https://api.tradewize.com.tr/api/v1/lists/my/501 \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"listTypeId": 4, "name": "Teknoloji Hisselerim (2026)"}'
GövdeJSON
{
  "listTypeId": 4,
  "name": "Teknoloji Hisselerim (2026)",
  "isPublic": false
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": { "id": 501, "name": "Teknoloji Hisselerim (2026)" }
}
C# örneğini göster
// Kullanıcı listesini günceller.
public async Task<string> UpdateMyListAsync(int id, object body)
{
    var request = new HttpRequestMessage(HttpMethod.Put, $"/api/v1/lists/my/{id}");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
DELETE /api/v1/lists/my/{id} manage

Liste sil

Bir kullanıcı listesini siler.

Yol parametreleri

Liste sil — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Silinecek liste kimliği.
İstekcURL
curl -X DELETE https://api.tradewize.com.tr/api/v1/lists/my/501 \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Kullanıcı listesini siler.
public async Task<string> DeleteMyListAsync(int id)
{
    var request = new HttpRequestMessage(HttpMethod.Delete, $"/api/v1/lists/my/{id}");
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
POST /api/v1/lists/my/{id}/add-symbols manage

Listeye sembol ekle

Bir kullanıcı listesine sembol ekler (sembol kimliği ile).

Sembol kimliğini (symbolId) uygulama arayüzünden veya mevcut liste uçlarından edinebilirsiniz.

Yol parametreleri

Listeye sembol ekle — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Liste kimliği.

Gövde alanları

Listeye sembol ekle — Gövde alanları
Alan Tip Açıklama
symbolId zorunlu integer Eklenecek sembolün kimliği.
İstekcURL
curl -X POST https://api.tradewize.com.tr/api/v1/lists/my/500/add-symbols \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"symbolId": 205}'
GövdeJSON
{
  "symbolId": 205
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Listeye sembol ekler.
public async Task<string> AddSymbolToListAsync(int listId, int symbolId)
{
    var request = new HttpRequestMessage(HttpMethod.Post, $"/api/v1/lists/my/{listId}/add-symbols");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { symbolId }), Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
DELETE /api/v1/lists/my/{id}/remove-symbols manage

Listeden sembol çıkar

Bir kullanıcı listesinden sembol çıkarır.

Yol parametreleri

Listeden sembol çıkar — Yol parametreleri
Alan Tip Açıklama
id zorunlu integer Liste kimliği.

Gövde alanları

Listeden sembol çıkar — Gövde alanları
Alan Tip Açıklama
symbolId zorunlu integer Çıkarılacak sembolün kimliği.
İstekcURL
curl -X DELETE https://api.tradewize.com.tr/api/v1/lists/my/500/remove-symbols \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{"symbolId": 205}'
GövdeJSON
{
  "symbolId": 205
}
Yanıt · 200JSON
{
  "success": true,
  "message": "İşlem Başarılı",
  "data": true
}
C# örneğini göster
// Listeden sembol çıkarır.
public async Task<string> RemoveSymbolFromListAsync(int listId, int symbolId)
{
    var request = new HttpRequestMessage(HttpMethod.Delete, $"/api/v1/lists/my/{listId}/remove-symbols");
    request.Headers.Authorization = await GetAuthHeaderAsync();
    request.Content = new StringContent(
        JsonSerializer.Serialize(new { symbolId }), Encoding.UTF8, "application/json");

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

Piyasa & Fiyat Verisi

PAY/VİOP son fiyatları, günlük OHLC, kapanmış mumlar, açık mumlar ve son tick verileri. Mevcut API key’leri kullanılabilir; mevcut report kapsamı bu veri endpoint’leri için yeterlidir, ek kapsam tanımlanması gerekmez. Örnek fiyatlar ve sözleşme kodları temsilîdir.

8 endpoint
GET /api/v1/market-data/last-price report

PAY son fiyat — compact

PAY sembolleri için sembol-fiyat sözlüğü döndürür. Mevcut yanıt yapısı korundu; yeni alanlar compact yanıta eklenmedi. Eski fiyatlar korunur; eksik, bulunamayan veya farklı ürüne ait semboller 0 döner.

503 düzeltmesi · sembol bazlı sonuç Eksik/eski fiyat veya fiyat kaynağı/sembol listesi erişim sorunu nedeniyle toplu son fiyat isteğinin 503 dönmesi giderildi. Eski fiyat orijinal zaman bilgisiyle, kullanılabilir kaydı olmayan sembol 0 olarak döner. Bu değişiklik kimlik doğrulama, istek doğrulama, kota ve diğer endpoint hatalarını kaldırmaz.
Seçim kuralları symbols veya all=true seçeneklerinden biri zorunludur. 100 farklı sembolün aşılması, bozuk sembol biçimi veya symbols ile all=true kullanılması 400 döner. Biçimi geçerli ama bulunamayan TSLA gibi bir sembol, diğer sonuçları etkilemeden 0 döner.
Fiyat zamanı Düz fiyat yanıtı değişmedi. Fiyatla birlikte zaman bilgisi için /last-price/details kullanın; her sembol price ve timestamp alanlarıyla döner.
Tüm semboller seçimi all=true seçiminde tüm sembol listesi oluşturulamıyorsa 200 ile boş veya kısmi sonuç dönebilir. X-TradeWise-Selection-Complete=false, seçimin tamamlanmadığını belirtir; boş sözlük doğrulanmış boş ürün listesi olarak yorumlanmamalıdır.
JWT + ürün grubu · 1 istek / saniye Aynı JWT için ürünün compact/details ve symbols/all=true istekleri ortak sayacı kullanır. Sembol sayısı maliyeti değiştirmez. PAY ve VİOP sayaçları birbirinden ayrıdır; bu gruplarda ek saatlik kota uygulanmaz.

Sorgu parametreleri

PAY son fiyat — compact — Sorgu parametreleri
Alan Tip Açıklama
symbols string all=true kullanılmıyorsa zorunlu. Virgülle ayrılmış en fazla 100 farklı sembol. Boşluklar temizlenir, harfler büyütülür, tekrarlar tekilleştirilir. Sembol biçimi: [A-Z0-9_.-]{1,64}.
all boolean true ise ilgili ürünün tüm aktif sembollerini seçer; 100 sembol sınırı uygulanmaz. symbols ile birlikte kullanılamaz. Varsayılan false.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/last-price?symbols=ASELS,EREGL,TSLA" \
  -H "Authorization: Bearer <access_token>"

# Tüm aktif PAY sembolleri
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/last-price?all=true" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "ASELS": 370.5,
  "EREGL": 28.12,
  "TSLA": 0
}
C# örneğini göster
// PAY compact son fiyat. symbols ile all=true mutually exclusive'dir.
public async Task<string> GetPayLastPriceAsync(string? symbols = null, bool all = false)
{
    if (all == !string.IsNullOrWhiteSpace(symbols))
        throw new ArgumentException("symbols veya all=true seçeneklerinden tam biri gerekir.");

    var url = all
        ? "/api/v1/market-data/last-price?all=true"
        : $"/api/v1/market-data/last-price?symbols={Uri.EscapeDataString(symbols!)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/market-data/last-price/details report

PAY son fiyat — details

Her sembol için yalnız price ve timestamp döndürür. timestamp, fiyat kaydının Unix milisaniye zamanıdır; istek zamanı veya gecikme süresi değildir. Düz fiyat endpoint’ini ayrıca çağırmak gerekmez.

price ve timestamp Yanıt doğrudan sembol sözlüğüdür; her kayıtta yalnız price (number) ve timestamp (integer veya null) bulunur. timestamp, 1 Ocak 1970 başlangıcına göre milisaniyedir. Eski fiyatın orijinal zamanı korunur; kayıt yeniden yüklendiğinde veya sorgulandığında güncellenmez.
Eksik kayıt Fiyat bulunamayan veya farklı ürüne ait sembol price=0, timestamp=null döner; diğer semboller etkilenmez. Fiyat var ama olay zamanı bilinmiyorsa fiyat korunur, timestamp=null olur.
Tüm semboller symbols en fazla 100 farklı sembol kabul eder; tamamı için all=true kullanılır. Sembol listesi henüz hazır değilse boş sözlük dönebilir. Bu durumda X-TradeWise-Selection-Complete başlığı false olur.
JWT + ürün grubu · 1 istek / saniye Aynı JWT için ürünün compact/details ve symbols/all=true istekleri ortak sayacı kullanır. Sembol sayısı maliyeti değiştirmez. PAY ve VİOP sayaçları birbirinden ayrıdır; bu gruplarda ek saatlik kota uygulanmaz.

Sorgu parametreleri

PAY son fiyat — details — Sorgu parametreleri
Alan Tip Açıklama
symbols string all=true kullanılmıyorsa zorunlu. Virgülle ayrılmış en fazla 100 farklı sembol. Boşluklar temizlenir, harfler büyütülür, tekrarlar tekilleştirilir. Sembol biçimi: [A-Z0-9_.-]{1,64}.
all boolean true ise ilgili ürünün tüm aktif sembollerini seçer; 100 sembol sınırı uygulanmaz. symbols ile birlikte kullanılamaz. Varsayılan false.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/last-price/details?symbols=ASELS,TSLA" \
  -H "Authorization: Bearer <access_token>"
200 OKJSON
{
  "ASELS": {
    "price": 370.5,
    "timestamp": 1788515700000
  },
  "TSLA": {
    "price": 0,
    "timestamp": null
  }
}
C# örneğini göster
// PAY details — fiyat ve Unix milisaniye zamanını okur.
public async Task<string> GetPayLastPriceDetailsAsync(string symbols)
{
    var url = $"/api/v1/market-data/last-price/details?symbols={Uri.EscapeDataString(symbols)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/market-data/viop/last-price report

VİOP son fiyat — compact

VİOP sözleşmeleri için sembol-fiyat sözlüğü döndürür. PAY fiyatları bu endpoint’ten alınmaz. 100 sembol sınırı, all=true ve eksik/eski fiyat davranışı PAY son fiyat endpoint’iyle aynıdır.

Ürün ayrımı PAY sembolleri /last-price, VİOP sözleşmeleri /viop/last-price üzerinden sorgulanır. Yanlış ürün seçimi ilgili sembol için 0 döner; details yanıtında price=0 ve timestamp=null olur.
503 düzeltmesi · sembol bazlı sonuç Eksik/eski fiyat veya fiyat kaynağı/sembol listesi erişim sorunu nedeniyle toplu son fiyat isteğinin 503 dönmesi giderildi. Eski fiyat orijinal zaman bilgisiyle, kullanılabilir kaydı olmayan sembol 0 olarak döner. Bu değişiklik kimlik doğrulama, istek doğrulama, kota ve diğer endpoint hatalarını kaldırmaz.
JWT + ürün grubu · 1 istek / saniye Aynı JWT için ürünün compact/details ve symbols/all=true istekleri ortak sayacı kullanır. Sembol sayısı maliyeti değiştirmez. PAY ve VİOP sayaçları birbirinden ayrıdır; bu gruplarda ek saatlik kota uygulanmaz.

Sorgu parametreleri

VİOP son fiyat — compact — Sorgu parametreleri
Alan Tip Açıklama
symbols string all=true kullanılmıyorsa zorunlu. Virgülle ayrılmış en fazla 100 farklı sembol. Boşluklar temizlenir, harfler büyütülür, tekrarlar tekilleştirilir. Sembol biçimi: [A-Z0-9_.-]{1,64}.
all boolean true ise ilgili ürünün tüm aktif sembollerini seçer; 100 sembol sınırı uygulanmaz. symbols ile birlikte kullanılamaz. Varsayılan false.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/viop/last-price?symbols=F_ASELS0926" \
  -H "Authorization: Bearer <access_token>"

# Tüm aktif VİOP sözleşmeleri
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/viop/last-price?all=true" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "F_ASELS0926": 380.25
}
GET /api/v1/market-data/viop/last-price/details report

VİOP son fiyat — details

Her sembol için yalnız price ve timestamp döndürür. timestamp, fiyat kaydının Unix milisaniye zamanıdır; istek zamanı veya gecikme süresi değildir. Düz fiyat endpoint’ini ayrıca çağırmak gerekmez.

price ve timestamp Yanıt doğrudan sembol sözlüğüdür; her kayıtta yalnız price (number) ve timestamp (integer veya null) bulunur. timestamp, 1 Ocak 1970 başlangıcına göre milisaniyedir. Eski fiyatın orijinal zamanı korunur; kayıt yeniden yüklendiğinde veya sorgulandığında güncellenmez.
Eksik kayıt Fiyat bulunamayan veya farklı ürüne ait sembol price=0, timestamp=null döner; diğer semboller etkilenmez. Fiyat var ama olay zamanı bilinmiyorsa fiyat korunur, timestamp=null olur.
Tüm semboller symbols en fazla 100 farklı sembol kabul eder; tamamı için all=true kullanılır. Sembol listesi henüz hazır değilse boş sözlük dönebilir. Bu durumda X-TradeWise-Selection-Complete başlığı false olur.
JWT + ürün grubu · 1 istek / saniye Aynı JWT için ürünün compact/details ve symbols/all=true istekleri ortak sayacı kullanır. Sembol sayısı maliyeti değiştirmez. PAY ve VİOP sayaçları birbirinden ayrıdır; bu gruplarda ek saatlik kota uygulanmaz.

Sorgu parametreleri

VİOP son fiyat — details — Sorgu parametreleri
Alan Tip Açıklama
symbols string all=true kullanılmıyorsa zorunlu. Virgülle ayrılmış en fazla 100 farklı sembol. Boşluklar temizlenir, harfler büyütülür, tekrarlar tekilleştirilir. Sembol biçimi: [A-Z0-9_.-]{1,64}.
all boolean true ise ilgili ürünün tüm aktif sembollerini seçer; 100 sembol sınırı uygulanmaz. symbols ile birlikte kullanılamaz. Varsayılan false.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/viop/last-price/details?symbols=F_ASELS0926" \
  -H "Authorization: Bearer <access_token>"

curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/viop/last-price/details?all=true" \
  -H "Authorization: Bearer <access_token>"
200 OKJSON
{
  "F_ASELS0926": {
    "price": 380.25,
    "timestamp": 1788516000000
  }
}
GET /api/v1/market-data/daily-ohlc report

Günlük OHLC

PAY/VİOP sembolleri için günlük açılış, en yüksek, en düşük, kapanış ve önceki kapanış değerlerini sembol bazlı sözlük olarak döndürür. Açık seansta oluşmakta olan, kapanış sonrası kesinleşmiş günlük bar kullanılır.

Alanlar lastClose önceki kapanıştır. lastUpdatedUtc barın güncellenme zamanı, tradingDate işlem günüdür. isFinal=false oluşmakta olan, true kesinleşmiş barı belirtir.
Eksik veri Verisi olmayan sembol yanıtta bulunmayabilir; sıfır değerli OHLC kaydı üretilmez. Hiç kullanılabilir veri olmaması veya geçici erişim hatası 503 döndürebilir. Son fiyat endpoint’lerindeki sembol bazlı 0 davranışı bu endpoint için geçerli değildir.
JWT + endpoint · 1 istek / 5 saniye Aynı JWT için iki kabul edilen istek arasında en az 5.000 ms gerekir. En fazla 250 sembol tek istekte sorgulanır; sembol sayısı veya sembol değişikliği sayacı etkilemez. Sayaç live-bar, recent-ticks ve fiyat gruplarından ayrıdır.

Sorgu parametreleri

Günlük OHLC — Sorgu parametreleri
Alan Tip Açıklama
symbols zorunlu string Virgülle ayrılmış en fazla 250 farklı PAY/VİOP sembolü. all=true desteklenmez.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/daily-ohlc?symbols=ASELS,F_ASELS0926" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "ASELS": {
    "open": 375,
    "high": 383,
    "low": 373.5,
    "close": 380.25,
    "lastClose": 372,
    "tradingDate": "2026-09-04",
    "lastUpdatedUtc": "2026-09-04T10:00:00Z",
    "isFinal": false
  },
  "F_ASELS0926": {
    "open": 376,
    "high": 383.5,
    "low": 374,
    "close": 380.5,
    "lastClose": 373,
    "tradingDate": "2026-09-04",
    "lastUpdatedUtc": "2026-09-04T10:00:00Z",
    "isFinal": false
  }
}
C# örneğini göster
// Günlük OHLC snapshot (tek veya çoklu sembol).
public async Task<string> GetDailyOhlcAsync(string symbols)
{
    var url = $"/api/v1/market-data/daily-ohlc?symbols={Uri.EscapeDataString(symbols)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/market-data/bars report

Kapanmış tarihsel barlar

Tek PAY veya VİOP sembolünün kapanmış OHLC barlarını getirir. Gün içi periyotlarda tradingDate, UTC aralığı veya countBack; günlük, haftalık ve aylık periyotlarda tarih aralığı, UTC aralığı veya countBack kullanılır. Açık mumlar bu yanıtın parçası değildir.

15m isteği neden 400 döner? 15m gün içi bir periyottur. interval=15m ile fromDate/toDate kullanılamaz; tradingDate, fromUtc/toUtc veya countBack seçeneklerinden birini kullanın. fromDate/toDate yalnız 1D, 1W ve 1M periyotları içindir.
Periyot ve tarih seçimi 1m, 3m, 5m, 15m, 30m, 60m ve 240m için: tek gün gerekiyorsa tradingDate, kesin saat aralığı gerekiyorsa fromUtc/toUtc, son N mum gerekiyorsa countBack kullanın. 1D, 1W ve 1M için tarih aralığında fromDate/toDate kullanabilirsiniz.
Sayfalama ve eksik geçmiş Sayfa içindeki sıralama eskiden yeniye doğrudur. hasMore=true ise nextCursor, aynı sorguya cursor olarak eklenir. isPartial=true eksik geçmişi belirtir; doğrulanmış boş sonuç anlamına gelmez. noData ayrı değerlendirilmelidir.
Sadeleştirilmiş bar yanıtı Müşteri yanıtında tickCount, barId, interval, revision, isFinal ve calendarVersion alanları yer almaz. Sorgu periyodu request içindeki interval parametresiyle belirlenmeye devam eder.
Kapanmış ve açık mum Yanıt yalnız kesinleşmiş/kapanmış barları içerir. Oluşmakta olan mum için live-bar, son fiyat olayları için recent-ticks kullanılır. VİOP tradingDate değeri sözleşmenin işlem günüdür.
Mevcut tarihsel veri kotaları korundu Yeni saniyelik limit eklenmedi. API key başına mevcut 120 ağırlık birimi/dakika ve kullanıcı başına 5.000 istek/saat kotaları sürer. İstek ağırlığı 1 + ceil(tahmini bar sayısı / 500) olarak hesaplanır. X-RateLimit-Limit, Remaining, Reset ve Request-Weight başlıklarını izleyin; 429 sonrasında Retry-After süresini bekleyin.
Hata durumları Geçersiz parametre veya cursor 400, kota aşımı 429; geçici veri erişim veya zaman aşımı hataları 502/503/504 döndürebilir. 503 düzeltmesi yalnız son fiyat endpoint’lerindeki eksik/eski fiyat ve sembol listesi erişim davranışını kapsar.

Sorgu parametreleri

Kapanmış tarihsel barlar — Sorgu parametreleri
Alan Tip Açıklama
symbol zorunlu string Tek PAY veya VİOP sembolü; virgülle çoklu sembol kabul edilmez. Örnek: ASELS veya F_ASELS0926.
interval zorunlu string Gün içi: 1m, 3m, 5m, 15m, 30m, 60m, 240m. Takvim periyotları: 1D, 1W, 1M. 1m dakika, 1M ay periyodudur.
countBack integer Tüm periyotlarda en güncel kapanmış barları almak için kullanılır. Örnek: interval=15m&countBack=100. limit ile birlikte verilirse değerleri aynı olmalıdır.
tradingDate date Yalnız gün içi periyotlar için tek işlem günü (YYYY-MM-DD). Örnek: interval=15m&tradingDate=2026-09-04. fromDate/toDate veya fromUtc/toUtc ile birlikte kullanılamaz; 1D/1W/1M ile kullanılırsa 400 döner.
fromDate date Yalnız 1D/1W/1M için dahil başlangıç tarihi. 1m-240m gün içi periyotlarla kullanılırsa 400 döner. tradingDate veya UTC aralığıyla birlikte gönderilemez.
toDate date Yalnız 1D/1W/1M için hariç bitiş tarihi. Başlangıçtan sonra olmalıdır; 1m-240m gün içi periyotlarla kullanılırsa 400 döner.
fromUtc datetime Tüm periyotlarda kullanılabilen alternatif dahil başlangıç zamanı. 15 dakikalık belirli bir saat aralığı için interval=15m ile fromUtc/toUtc gönderin. Tarih seçicileriyle birlikte kullanılamaz.
toUtc datetime Alternatif hariç bitiş zamanı. Başlangıçtan sonra olmalıdır; fromUtc ile birlikte kullanılması önerilir.
limit integer Sayfa büyüklüğü: en fazla 1.000 bar; 1M için en fazla 300 bar. countBack ile birlikte gönderilirse aynı değerde olmalıdır.
cursor string Önceki yanıttaki nextCursor. Aynı sembol, periyot ve aralık korunarak sonraki (daha eski) sayfa istenir.
İstekcURL
# En güncel 100 adet kapanmış 15 dakikalık mum
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/bars?symbol=ASELS&interval=15m&countBack=100" \
  -H "Authorization: Bearer <access_token>"

# Belirli bir işlem gününün 15 dakikalık mumları
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/bars?symbol=ASELS&interval=15m&tradingDate=2026-09-04&limit=1000" \
  -H "Authorization: Bearer <access_token>"

# Belirli bir UTC zaman aralığının 15 dakikalık mumları
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/bars?symbol=ASELS&interval=15m&fromUtc=2026-09-04T07:00:00Z&toUtc=2026-09-04T15:10:00Z" \
  -H "Authorization: Bearer <access_token>"

# Günlük mumlarda tarih aralığı: başlangıç dahil, bitiş hariç
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/bars?symbol=ASELS&interval=1D&fromDate=2026-08-01&toDate=2026-09-01" \
  -H "Authorization: Bearer <access_token>"
200 OK · kısaltılmış yanıt (tek bar gösteriliyor)JSON
{
  "symbol": "ASELS",
  "bars": [
    {
      "timeUtc": "2026-09-04T07:00:00Z",
      "closeTimeUtc": "2026-09-04T07:05:00Z",
      "open": 380,
      "high": 381,
      "low": 379.75,
      "close": 380.25
    }
  ],
  "noData": false,
  "hasMore": false,
  "nextCursor": null,
  "isPartial": false
}
C# örneğini göster
// Kapanmış barlar: countBack, tarih/zaman aralığı ve cursor.
public async Task<string> GetHistoricalBarsAsync(
    string symbol,
    string interval,
    DateOnly? tradingDate = null,
    DateOnly? fromDate = null,
    DateOnly? toDate = null,
    int? limit = null,
    string? cursor = null,
    int? countBack = null,
    DateTimeOffset? fromUtc = null,
    DateTimeOffset? toUtc = null)
{
    var url = $"/api/v1/market-data/bars?symbol={Uri.EscapeDataString(symbol)}&interval={Uri.EscapeDataString(interval)}";
    if (tradingDate is not null) url += $"&tradingDate={tradingDate:yyyy-MM-dd}";
    if (fromDate is not null) url += $"&fromDate={fromDate:yyyy-MM-dd}";
    if (toDate is not null) url += $"&toDate={toDate:yyyy-MM-dd}";
    if (limit is not null) url += $"&limit={limit}";
    if (!string.IsNullOrWhiteSpace(cursor)) url += $"&cursor={Uri.EscapeDataString(cursor)}";
    if (countBack is not null) url += $"&countBack={countBack}";
    if (fromUtc is not null) url += $"&fromUtc={Uri.EscapeDataString(fromUtc.Value.ToString("O"))}";
    if (toUtc is not null) url += $"&toUtc={Uri.EscapeDataString(toUtc.Value.ToString("O"))}";

    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/market-data/live-bar report

Açık mum — live-bar

PAY/VİOP sembollerinde seçilen periyodun oluşmakta olan OHLC barını döndürür. Kapanmış mumlar bars endpoint’inden alınır; grafik üzerinde açık mum sembol, periyot ve açılış zamanıyla güncellenir.

Alanlar ve eksik kayıt tickCount tick sayısıdır. Aktif mumu olmayan sembol bars listesinde bulunmayabilir. isClosed=false oluşmakta olan barı belirtir. Geçici veri erişim hatası 503 döndürebilir.
JWT + endpoint · 1 istek / 5 saniye Aynı JWT için kabul edilen istekler arasında en az 5.000 ms gerekir. Sayaç günlük OHLC ve diğer endpoint gruplarından ayrıdır. Sembol veya periyot değiştirmek limiti sıfırlamaz.

Sorgu parametreleri

Açık mum — live-bar — Sorgu parametreleri
Alan Tip Açıklama
symbols zorunlu string Virgülle ayrılmış en fazla 250 farklı PAY/VİOP sembolü. all=true desteklenmez.
period zorunlu string 1m, 3m, 5m, 15m, 30m, 60m, 240m veya 1D.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/live-bar?symbols=ASELS,F_ASELS0926&period=5m" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "period": "5m",
  "serverTimeUtc": "2026-09-04T07:03:00Z",
  "count": 1,
  "bars": [
    {
      "symbol": "ASELS",
      "period": "5m",
      "openTimeUnix": 1788505200,
      "openTimeUtc": "2026-09-04T07:00:00Z",
      "open": 380,
      "high": 381,
      "low": 379.75,
      "close": 380.25,
      "tickCount": 20,
      "firstTickTimeUtc": "2026-09-04T07:00:00.140Z",
      "lastTickTimeUtc": "2026-09-04T07:02:58Z",
      "isClosed": false
    }
  ]
}
C# örneğini göster
// Anlık (kapanmamış) canlı bar — içinde bulunulan dakika dahil.
public async Task<string> GetLiveBarAsync(string symbols, string period)
{
    var url = $"/api/v1/market-data/live-bar?symbols={Uri.EscapeDataString(symbols)}&period={Uri.EscapeDataString(period)}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}
GET /api/v1/market-data/recent-ticks report

Son tick’ler — recent-ticks

PAY/VİOP sembollerinin son 1–5 saniyedeki fiyat olaylarını eskiden yeniye sıralı döndürür. Kısa aralıklı sorgulama için tasarlanmıştır; tarihsel tick arşivi değildir.

Tekilleştirme Çakışan sorgu pencerelerindeki tick’ler eventId üzerinden tekilleştirilmelidir. Üç saniyede bir son beş saniyeyi sorgulamak aralıkların örtüşmesini sağlar; aynı olayın iki defa işlenmesini önlemek istemcinin sorumluluğundadır.
JWT + endpoint · 1 istek / 3 saniye Aynı JWT için kabul edilen istekler arasında en az 3.000 ms gerekir. Sembol sayısı, sembol listesi ve seconds değişikliği sayacı sıfırlamaz. Geçici veri erişim hatası 503 döndürebilir.

Sorgu parametreleri

Son tick’ler — recent-ticks — Sorgu parametreleri
Alan Tip Açıklama
symbols zorunlu string Virgülle ayrılmış en fazla 250 farklı PAY/VİOP sembolü. all=true desteklenmez.
seconds integer Geriye bakış penceresi: 1–5 saniye; varsayılan 5. İzin verilen aralık dışı değerler 400 döner.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/market-data/recent-ticks?symbols=ASELS&seconds=5" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "success": true,
  "windowSeconds": 5,
  "serverTimeUtc": "2026-09-04T07:00:30Z",
  "fromMs": 1788505225000,
  "count": 1,
  "ticks": [
    {
      "eventId": "example-tick-1",
      "symbol": "ASELS",
      "price": 380.25,
      "timestampMs": 1788505228000,
      "marketType": "pay"
    }
  ]
}
C# örneğini göster
// Son X saniyedeki ham tick'ler (X en fazla 5).
public async Task<string> GetRecentTicksAsync(string symbols, int seconds = 5)
{
    var url = $"/api/v1/market-data/recent-ticks?symbols={Uri.EscapeDataString(symbols)}&seconds={seconds}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}

TradingView Ham Sinyal Akışı

TradingView webhook’u Gateway tarafından kalıcı olarak kabul edilir edilmez Gateway → RabbitMQ → Redis → Developer API yoluyla yayınlanır. Robot.Api bu teslimat yolunda değildir; olay, robotun sinyali onayladığı veya emir verdiği anlamına gelmez. Webhook URL oluşturma ya da yenileme yanıtının data zarfında data.webhookUrl ile birlikte dönen data.signalStreamId, hem canlı abonelikte hem catch-up isteğinde kullanılır.

1 endpoint
GET /api/v1/tradingview-signals/{streamId} read:tradingview-signals

Kaçırılan TradingView sinyallerini getir

Bir signalStreamId için cursor sonrasındaki kalıcı ham sinyal projeksiyonlarını sıralı olarak döndürür. İlk okumada after=0-0 kullanın; sonraki okumalar için nextCursor değerini güvenli biçimde saklayın.

signalStreamId gizlidir Robot API yanıtı { success, message, data: { webhookUrl, signalStreamId, ... } } zarfındadır. signalStreamId, webhook URL gibi taşıyıcı yetki niteliğindedir. REST path segmentini proxy/access loglarında, signal.streamId alanını payload loglarında redakte edin; kaynak koda, herkese açık tarayıcı bundle’ına veya analitik olaylarına yazmayın.
Yenileme ve eski geçmiş Webhook URL yenilendiğinde yeni data.signalStreamId değerini kullanın. Yenileme eski URL’nin yeni olay üretmesini durdurur fakat eski Redis geçmişini anında silmez; eski kimlik, inactivity TTL veya trim sınırına kadar uygun JWT ile okunabilir.
Kapsam uyumluluğu Yeni anahtarlarda read:tradingview-signals kapsamını seçin. Geçiş döneminde mevcut read:tradingview-bots veya report kapsamına sahip API anahtarları da kabul edilir.
Projection durumu parseStatus=parsed ortak alanların ayrıştırıldığını gösterir. partial bazı ortak alanların bulunamadığı, invalid ise gövdenin ayrıştırılamadığı anlamına gelir. Her iki durumda da webhook Gateway tarafından kalıcı olarak kabul edilmiştir; olay robot onayı veya işlem sonucu değildir.
TradingView alan eşlemesi Parser anahtarları büyük/küçük harf duyarsız okur: symbol/ticker; signal/action/side; price/close/lastPrice/last_price; quantity/qty/contracts; signalName/signal_name/strategyName/strategy_name/name/message; interval/timeframe; eventId/event_id/id. Timestamp için eventTimeUtc/event_time_utc/timestamp/time/ts alanlarında ISO-8601 veya epoch saniye/milisaniye kabul edilir; yoksa gatewayReceivedAtUtc kullanılır. parsed için symbol ve signal yeterlidir.
Catch-up penceresi Redis stream’e her yeni olay eklendiğinde inactivity TTL varsayılan olarak 7 güne yenilenir; 7 gün yeni olay gelmezse stream tamamen expire olur. Aktif stream yaklaşık 10.000 en yeni kayıtla trim edilir. Cursor’ı her başarılı tüketimden sonra saklayın ve bu endpoint’i kalıcı arşiv olarak kullanmayın.

Yol parametreleri

Kaçırılan TradingView sinyallerini getir — Yol parametreleri
Alan Tip Açıklama
streamId zorunlu string Webhook URL oluşturma/yenileme yanıtının data.signalStreamId alanındaki 64 karakterli kimlik. Bu değer bir bearer capability’dir; loglamayın ve herkese açık istemcilere koymayın.

Sorgu parametreleri

Kaçırılan TradingView sinyallerini getir — Sorgu parametreleri
Alan Tip Açıklama
after string Hariç tutulan son Redis Stream cursor’ı. Varsayılan 0-0; örnek: 1793364001000-0.
count integer Döndürülecek en fazla olay sayısı. Varsayılan 100; aralık 1-500.
İstekcURL
curl -X GET "https://api.tradewize.com.tr/api/v1/tradingview-signals/0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef?after=1793364000000-0&count=100" \
  -H "Authorization: Bearer <access_token>"
Yanıt · 200JSON
{
  "events": [
    {
      "cursor": "1793364001000-0",
      "signal": {
        "schemaVersion": "1.0",
        "notificationId": "gws-example-42",
        "deliveryId": "tvd-example-42",
        "correlationId": "2f846fb1-81ac-4134-9b8e-d4c86f9291d5",
        "streamId": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
        "brokerageCode": "MarbasMenkul",
        "symbol": "THYAO",
        "signal": "buy",
        "price": 321.45,
        "quantity": 2.5,
        "signalTimestampUtc": "2026-10-30T09:59:59.123Z",
        "gatewayReceivedAtUtc": "2026-10-30T10:00:00Z",
        "signalName": "Kırılım v3",
        "interval": "15",
        "sourceEventId": "tv-42",
        "parseStatus": "parsed"
      }
    }
  ],
  "nextCursor": "1793364001000-0"
}
C# örneğini göster
// Bağlantı kesintisinden sonra TradingView ham sinyallerini cursor ile tamamlar.
public async Task<string> GetTradingViewSignalsAsync(
    string signalStreamId, string after = "0-0", int count = 100)
{
    var url = $"/api/v1/tradingview-signals/{Uri.EscapeDataString(signalStreamId)}" +
              $"?after={Uri.EscapeDataString(after)}&count={count}";
    var request = new HttpRequestMessage(HttpMethod.Get, url);
    request.Headers.Authorization = await GetAuthHeaderAsync();

    var response = await _httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
    return await response.Content.ReadAsStringAsync();
}