> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbitflare.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Metis Swap API

> Takas işlemleri için düşük seviyeli Jupiter yönlendirme motoru — CPI, özel talimatlar ve tam işlem kontrolü

## Genel Bakış

Metis, Jupiter'ın düşük seviyeli takas yönlendirme motorudur. Bir takas işleminin her boyutunu ayrıntılı biçimde kontrol etmeyi mümkün kılar: rota seçimi, talimat oluşturma, öncelik ücretleri, hesaplama birimi limitleri, kayma toleransı ve yayın. Jupiter Ultra'nın aksine Metis, bunları kendiniz yönetmenizi gerektirir — buna karşılık CPI, özel talimatlar veya belirli bir işlem yayın stratejisine ihtiyaç duyan entegrasyonlar için maksimum esneklik sunar.

**Metis'i şu durumlarda kullanın:**

* Kendi zincir üstü programınızla CPI (Çapraz Program Çağrısı)
* Takasın etrafında özel talimat oluşturma
* Öncelik ücretleri, hesaplama birimleri ve kayma toleransı üzerinde tam kontrol
* Kendi RPC'niz veya Jito yayını

**Bunun yerine Ultra'yı şu durumlarda değerlendirin:**

* Kayma toleransını, ücretleri veya yayını yönetmeden uçtan uca yürütme istiyorsanız
* Yalnızca Ultra aracılığıyla kullanılabilen Gerçek Zamanlı Kayma Tahmincisine (RTSE) ihtiyacınız varsa

<Note>
  Metis Swap API erişimi, düğüm uç noktanızdaki `/jup` yolu önekiyle OrbitFlare **Özel Düğümler** üzerinde mevcuttur. Barındırılan Jupiter API için `https://api.jup.ag/swap/v1/...` adresini `x-api-key`'inizle kullanın.
</Note>

## Nasıl Çalışır

<Steps>
  <Step title="Teklif Alın">
    En iyi rotayı Metis yönlendirme motorundan almak için giriş mint, çıkış mint, miktar ve kayma toleransıyla `GET /swap/v1/quote` çağrısı yapın.
  </Step>

  <Step title="Takas İşlemi Oluşturun">
    Teklif yanıtını `POST /swap/v1/swap` adresine gönderin. API, isteğe bağlı öncelik ücreti tahmini, dinamik hesaplama birimi limitleri ve dinamik kayma toleransıyla imzalanmaya hazır serileştirilmiş bir işlem döndürür.
  </Step>

  <Step title="İmzalayın ve Gönderin">
    Base64 işlemini seri dışı bırakın, cüzdanınızla imzalayın ve `connection.sendRawTransaction()` veya Jito aracılığıyla yayınlayın.
  </Step>
</Steps>

***

## Adım 1 — Teklif Alın

**Uç Nokta:** `GET /swap/v1/quote`

### Gerekli Parametreler

| Parametre     | Açıklama                                                                                                  |
| ------------- | --------------------------------------------------------------------------------------------------------- |
| `inputMint`   | Giriş tokeninin mint adresi (örn. SOL için `So11111111111111111111111111111111111111112`)                 |
| `outputMint`  | Çıkış tokeninin mint adresi (örn. USDC için `EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v`)               |
| `amount`      | Ondalıklardan önce giriş tokenlerinin ham tam sayı miktarı (SOL için lamport, diğerleri için atom birimi) |
| `slippageBps` | Baz puanlarla maksimum kayma toleransı (örn. `50` = %0,5)                                                 |

### Örnek — 1 SOL'u USDC'ye Teklif Et

```javascript theme={null}
const quoteResponse = await (
  await fetch(
    "https://api.jup.ag/swap/v1/quote?" +
      "inputMint=So11111111111111111111111111111111111111112" +
      "&outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" +
      "&amount=100000000" +
      "&slippageBps=50" +
      "&restrictIntermediateTokens=true",
    {
      headers: {
        "x-api-key": "YOUR_API_KEY",
      },
    }
  )
).json();

console.log(JSON.stringify(quoteResponse, null, 2));
```

### Örnek Yanıt

```json theme={null}
{
  "inputMint": "So11111111111111111111111111111111111111112",
  "inAmount": "100000000",
  "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
  "outAmount": "16198753",
  "otherAmountThreshold": "16117760",
  "swapMode": "ExactIn",
  "slippageBps": 50,
  "platformFee": null,
  "priceImpactPct": "0",
  "routePlan": [
    {
      "swapInfo": {
        "ammKey": "5BKxfWMbmYBAEWvyPZS9esPducUba9GqyMjtLCfbaqyF",
        "label": "Meteora DLMM",
        "inputMint": "So11111111111111111111111111111111111111112",
        "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "inAmount": "100000000",
        "outAmount": "16198753"
      },
      "percent": 100
    }
  ],
  "contextSlot": 299283763,
  "timeTaken": 0.015257836
}
```

<Tip>
  `outAmount`, teklif anındaki mümkün olan en iyi çıktıdır. `slippageBps` bu değeri etkilemez — kabul edeceğiniz minimum olan `otherAmountThreshold`'u kontrol eder.
</Tip>

### Ek Teklif Seçenekleri

<AccordionGroup>
  <Accordion title="restrictIntermediateTokens">
    Yönlendirmenin yalnızca yüksek likiditeye sahip ara tokenlar üzerinden geçmesini sağlamak için `true` olarak ayarlayın. Bu, likidite yetersizliğinden kaynaklanan yönlendirme hatalarını azaltır ve fiyata küçük potansiyel maliyet karşılığında rota kararlılığını iyileştirir.
  </Accordion>

  <Accordion title="onlyDirectRoutes">
    Yönlendirmeyi tek bir piyasayla kısıtlamak için `true` olarak ayarlayın (çoklu atlama yok). Doğrudan rota yoksa teklif döndürmez. Olumsuz fiyatlar verebilir — dikkatli kullanın.
  </Accordion>

  <Accordion title="maxAccounts">
    İç takas talimatlarındaki toplam hesap sayısını sınırlar. Kendi talimatlarınız için yer bırakmanız gerektiğinde kullanışlıdır. Önerilen minimum `64`'tür. Çok düşük ayarlamak, daha fazla hesap gerektiren DEX'leri düşürür (örn. Meteora DLMM 47'ye kadar gerektirir).
  </Accordion>

  <Accordion title="platformFeeBps">
    `feeAccount`'unuza kredilendirilecek takasa bir ücret ekleyin. Takas isteğinde `feeAccount` ile birleştirin.
  </Accordion>
</AccordionGroup>

***

## Adım 2 — Takas İşlemi Oluşturun

**Uç Nokta:** `POST /swap/v1/swap`

Adım 1'den alınan teklif yanıtını kullanıcının genel anahtarıyla birlikte iletin. API, imzalanmaya ve gönderilmeye hazır serileştirilmiş base64 işlemi döndürür.

### Yerleşim Optimizasyonlarıyla İşlem Oluşturun

```javascript theme={null}
const swapResponse = await (
  await fetch("https://api.jup.ag/swap/v1/swap", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": "YOUR_API_KEY",
    },
    body: JSON.stringify({
      quoteResponse,
      userPublicKey: wallet.publicKey.toString(),

      // İşlem yerleşimi için optimize et
      dynamicComputeUnitLimit: true,
      dynamicSlippage: true,
      prioritizationFeeLamports: {
        priorityLevelWithMaxLamports: {
          maxLamports: 1000000,
          priorityLevel: "veryHigh",
        },
      },
    }),
  })
).json();
```

### Örnek Yanıt

```json theme={null}
{
  "swapTransaction": "AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAQAGDkS+...",
  "lastValidBlockHeight": 279632475,
  "prioritizationFeeLamports": 9999,
  "computeUnitLimit": 388876,
  "prioritizationType": {
    "computeBudget": {
      "microLamports": 25715,
      "estimatedMicroLamports": 785154
    }
  },
  "dynamicSlippageReport": {
    "slippageBps": 50,
    "otherAmount": 20612318,
    "simulatedIncurredSlippageBps": -18,
    "amplificationRatio": "1.5",
    "categoryName": "lst",
    "heuristicMaxSlippageBps": 100
  },
  "simulationError": null
}
```

### Öncelik Ücreti Seviyeleri

| `priorityLevel` | Yüzdelik | Kullanım Senaryosu                                       |
| --------------- | -------- | -------------------------------------------------------- |
| `medium`        | 25.      | Düşük yoğunluk, zaman açısından kritik olmayan           |
| `high`          | 50.      | Standart alım satım koşulları                            |
| `veryHigh`      | 75.      | Rekabetçi koşullar, MEV, zaman açısından kritik takaslar |

Ücret artışları sırasında fazla ödemeyi önlemek için `maxLamports`'u güvenlik sınırı olarak ayarlayın:

```javascript theme={null}
prioritizationFeeLamports: {
  priorityLevelWithMaxLamports: {
    maxLamports: 10000000,
    global: false,        // küresel değil yerel ücret piyasası (yazılabilir hesaplar) kullan
    priorityLevel: "veryHigh",
  },
}
```

### Bunun Yerine Takas Talimatlarını Kullanma

Takası kendi talimatlarınızla oluşturmanız gerekiyorsa `/swap/v1/swap` yerine `/swap/v1/swap-instructions` kullanın. Aynı parametreleri alır ancak serileştirilmiş işlem yerine ayrı talimat nesneleri döndürür:

```javascript theme={null}
const instructions = await (
  await fetch("https://api.jup.ag/swap/v1/swap-instructions", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-api-key": "YOUR_API_KEY",
    },
    body: JSON.stringify({
      quoteResponse,
      userPublicKey: wallet.publicKey.toString(),
    }),
  })
).json();

const {
  computeBudgetInstructions,
  setupInstructions,
  swapInstruction: swapInstructionPayload,
  cleanupInstruction,
  addressLookupTableAddresses,
} = instructions;
```

***

## Adım 3 — Takas İşlemini Gönderin

### Seri Dışı Bırakın, İmzalayın ve Serileştirin

Yanıttaki `swapTransaction` alanı base64 kodludur. `VersionedTransaction` olarak seri dışı bırakın, imzalayın, ardından göndermek için tekrar binary'e dönüştürün:

```javascript theme={null}
import { VersionedTransaction } from "@solana/web3.js";

const transactionBase64 = swapResponse.swapTransaction;
const transaction = VersionedTransaction.deserialize(
  Buffer.from(transactionBase64, "base64")
);

transaction.sign([wallet]);

const transactionBinary = transaction.serialize();
```

### İşlemi Gönderin

```javascript theme={null}
const signature = await connection.sendRawTransaction(transactionBinary, {
  maxRetries: 2,
  skipPreflight: true,
});
```

| Seçenek         | Açıklama                                                                                                     |
| --------------- | ------------------------------------------------------------------------------------------------------------ |
| `maxRetries`    | Vazgeçmeden önce maksimum yeniden deneme sayısı. Atlanırsa RPC, blok hash süresi dolana kadar yeniden dener. |
| `skipPreflight` | Göndermeden önce imza doğrulamasını ve simülasyonu atlayın. Hıza duyarlı takaslar için `true` önerilir.      |

### İşlemi Onaylayın

```javascript theme={null}
const confirmation = await connection.confirmTransaction(
  { signature },
  "finalized"
);

if (confirmation.value.err) {
  throw new Error(
    `Transaction failed: ${JSON.stringify(confirmation.value.err)}\nhttps://solscan.io/tx/${signature}/`
  );
} else {
  console.log(`Transaction successful: https://solscan.io/tx/${signature}/`);
}
```

### Jito Aracılığıyla Yayın

Daha hızlı dahil edilme ve MEV koruması için Jito kullanmak istiyorsanız `prioritizationFeeLamports`'u Jito bahşişiyle değiştirin ve bir Jito RPC uç noktasına gönderin:

```javascript theme={null}
body: JSON.stringify({
  quoteResponse,
  userPublicKey: wallet.publicKey.toString(),
  prioritizationFeeLamports: {
    jitoTipLamports: 1000000, // sabit lamport, sınır değil
  },
}),
```

<Warning>
  Jito bahşişlerinin geçerli olması için Jito RPC uç noktasına gönderilmesi gerekir. Standart RPC'ye göndermek Jito'nun blok motoru üzerinden yönlendirmez.
</Warning>

***

## Gelişmiş

<AccordionGroup>
  <Accordion title="Dinamik Kayma Toleransı">
    Takas isteğinde `dynamicSlippage: true` etkinleştirin. Backend işlemi simüle eder ve uygun bir kayma toleransı değerini tahmin etmek için token kategorisine dayalı buluşsal yöntemler uygular.

    Not: Dinamik Kayma Toleransı geliştirmesi durdurulmuştur. Üretim kullanımı için Jupiter, Gerçek Zamanlı Kayma Tahmincisi (RTSE) içeren Ultra Swap API'sini önermektedir — önemli ölçüde daha doğru ve reaktif bir sistem.
  </Accordion>

  <Accordion title="CPI (Çapraz Program Çağrısı)">
    Ocak 2025 itibarıyla CPI aracılığıyla Jupiter Swap, zincir üstü program entegrasyonu için önerilen yöntemdir. Programınıza `jupiter-cpi` crate'ini ekleyin:

    ```toml theme={null}
    [dependencies]
    jupiter-cpi = { git = "https://github.com/jup-ag/jupiter-cpi", rev = "5eb8977" }
    ```

    Ardından talimat işleyicinizden paylaşılan hesaplar rotasını çağırın. Tam referans uygulama için [Jupiter CPI örneğine](https://github.com/jup-ag/jupiter-cpi-swap-example) bakın.
  </Accordion>

  <Accordion title="Flash Fill (Eski)">
    Flash Fill, Sürümlü İşlemleri ve Adres Arama Tablolarını kullanan CPI hesap boyutu sınırlamaları için önceki bir geçici çözümdü. Solana ana ağında Gevşetilmiş CPI kısıtlamaları yayınlandığından bu yana artık önerilmemektedir. Geçmiş referans için [sol-swap-flash-fill](https://github.com/jup-ag/sol-swap-flash-fill)'e bakın.
  </Accordion>

  <Accordion title="DEX Hesabı Gereksinimleri">
    `maxAccounts` kullanırken, DEX başına tahmini hesap sayıları şunlardır (ALT'lar mevcut olduğunda min, olmadığında maks geçerlidir):

    | DEX                   | Maks. Hesap | Min. Hesap |
    | --------------------- | :---------: | :--------: |
    | Meteora DLMM          |      47     |     19     |
    | Meteora               |      45     |     18     |
    | Raydium               |      45     |     18     |
    | Raydium CLMM          |      45     |     19     |
    | Moonshot              |      37     |     15     |
    | Raydium CPMM          |      37     |     14     |
    | Pumpfun AMM           |      42     |     17     |
    | Pumpfun Bonding Curve |      40     |     16     |
    | Orca Whirlpool        |      30     |     12     |
    | Obric                 |      30     |     12     |
    | Solfi                 |      22     |      9     |
    | Sanctum               |      80     |     80     |
    | Sanctum Infinity      |      80     |     80     |

    `maxAccounts`'u çok düşük ayarlamak, DEX'leri sessizce yönlendirmeden düşürür. Mümkün olduğunca yüksek tutun ve yalnızca işleminiz 1232 bayt boyut sınırını aşarsa azaltın.
  </Accordion>
</AccordionGroup>

***

## Gereksinimler ve Kaynaklar

OrbitFlare aracılığıyla Metis Swap API erişimi yalnızca **Özel Düğümler** üzerinde mevcuttur. API, özel düğüm uç noktanızdaki `/jup` yolu aracılığıyla veya doğrudan Jupiter API anahtarıyla `https://api.jup.ag/swap/v1/...` adresinden erişilebilir.

<CardGroup cols={2}>
  <Card title="Resmi Metis Belgeleri" icon="book" href="https://dev.jup.ag/docs/swap">
    Tüm Metis uç noktaları, parametreler ve yanıt şemaları için eksiksiz API referansı.
  </Card>

  <Card title="Metis Binary (GitHub)" icon="code" href="https://github.com/jup-ag/metis-binary">
    Yönlendirme motorunu kendi altyapınızda çalıştırmak için Jupiter'ın kendi kendine barındırılabilir Metis binary'si.
  </Card>

  <Card title="Jito Paket Simülasyonu" icon="bolt" href="/tr/trading-apis/jito-bundle-simulation">
    Gönderimden önce özel düğümünüzde Jito MEV paketlerini simüle edin ve doğrulayın.
  </Card>

  <Card title="Özel Düğümler" icon="server" href="/tr/dedicated-nodes">
    Metis Swap API erişimi dahil sınırsız RPS'li izole Solana altyapısı konuşlandırın.
  </Card>
</CardGroup>
