<!-- Source: https://docs.infraio.xyz/tr/api-reference -->
<!-- Last updated: 2026-10-04 -->

# API Referansı

Aşağıdaki her uç nokta JSON konuşur, `https://api.infraio.xyz` (prod) veya
`https://api-dev.infraio.xyz` (test) altında yaşar ve HMAC-SHA256 ile
kimlik doğrulanır — istek imzalama için
[Kimlik doğrulama](https://docs.infraio.xyz/tr/api-reference/authentication) ve hata zarf şekli
için [Hatalar](https://docs.infraio.xyz/tr/api-reference/errors) sayfasına bakın.

Bu sayfa, satıcı entegrasyonları için uç noktaları listeler. Kendi sayfası
olmayan bir uç nokta, ilgili kavram sayfasında açıklanır.

> **Note:**
>
> **`/b2b/v1/*`** altındaki uç noktalar **secret** anahtarınızla (`sk_…`)
> HMAC-imzalıdır. Backend'inizin çağırdığı yüzey budur. Satıcı paneli ve
> barındırılan checkout kendi uç noktalarını kullanır; bunlar entegrasyon
> API'sinin parçası değildir.

## Checkout

| Method | Path | Amaç | Notlar |
| --- | --- | --- | --- |
| `POST` | `/b2b/v1/checkout-sessions/quick` | Tek çağrıda bir oturum oluştur — order + checkout-session birlikte üretilir. | İstek gövdesi ve örnek için bkz. [Hızlı başlangıç](https://docs.infraio.xyz/tr/get-started/quickstart#2-create-a-checkout-session-server). |
| `POST` | `/b2b/v1/checkout-sessions` | *Mevcut* bir siparişe karşı oturum oluştur. Platformunuzun zaten kendi sipariş modeli olduğunda ve deneme başına bir oturum istediğinizde kullanın. | İki adımlı akış. |
| `GET` | `/b2b/v1/checkout-sessions/by-order/{order_id}` | Bir sipariş için üretilmiş tüm oturumları listele. | Bir alıcı bir oturumu terk ettiğinde ve önceki denemeleri panelinizde göstermek istediğinizde kullanışlı. |

## Siparişler

Siparişler zamansız faturalanabilir varlıktır. Tek bir sipariş birden fazla
checkout oturumunu destekleyebilir (örn. alıcı terk eder, yeniden dener).

| Method | Path | Amaç | Notlar |
| --- | --- | --- | --- |
| `POST` | `/b2b/v1/orders` | Oturumsuz bir sipariş oluştur. | Alıcıyı hemen yönlendirmek yerine daha sonra bir ödeme bağlantısı göndermek istediğinizde kullanın. |
| `GET` | `/b2b/v1/orders/{id}` | Line item'lar + durum ile tek bir siparişi oku. | Durum: `PENDING` → `PAID` \| `PARTIAL_PAID` \| `CANCELED`. İade sonrası: `PARTIALLY_REFUNDED` \| `REFUNDED`. |
| `GET` | `/b2b/v1/orders/by-merchant/{merchant_id}` | Siparişlerinizi listele, cursor-pagination ile. | Cursor protokolü için bkz. [Cursor pagination](#cursor-pagination). |
| `PATCH` | `/b2b/v1/orders/{id}/cancel` | Ödenmemiş bir siparişi iptal edildi olarak işaretle. `order.canceled` yayar. | Sipariş zaten ödenmişse başarısız olur. |
| `PATCH` | `/b2b/v1/orders/{id}/reopen` | Bir otomatik-iptali tersine çevir (`canceled_reason=payment_timeout`). | TTL süresi dolduktan sonra alıcı geri gelirse kullanışlı. |

## İadeler

Saga akışı ve token yaşam döngüsü için
[İadeler kavram sayfasına](https://docs.infraio.xyz/tr/concepts/refunds) bakın.

### Satıcı tarafından başlatılan

| Method | Path | Amaç | Notlar |
| --- | --- | --- | --- |
| `POST` | `/b2b/v1/merchants/{merchant_id}/refunds` | Satıcı tarafından başlatılan iade. Otomatik onaylanır (`PENDING` atlanır). | Hemen `payment.refund.approved` yayar. |

### Müşteri tarafından başlatılan — iade-talep token'ları

Alıcı iade formunu bizim barındırılan sayfamızda doldurur; siz yalnızca
token'ı üretir ve URL'yi iletirsiniz. Token'ları backend'inizden (aşağıda)
veya satıcı panelinden üretebilirsiniz. Yenilemeler ve iptaller panelde
yönetilir.

| Method | Path | Auth | Amaç |
| --- | --- | --- | --- |
| `POST` | `/b2b/v1/merchants/{merchant_id}/refund-requests` | HMAC (`sk_…`) | Backend'inizden bir token üret. Gövde: `{ref_type, ref_value, amount, ttl_seconds?, metadata?, hide_summary?, hide_header?}`. `ref_type` `order_id` / `order_number` / `session_id` / `session_key`'den biridir; `ref_value` eşleşen tanımlayıcıdır. `amount` **gereklidir** ve alıcının gönderebileceği maksimumu kilitler. Varsayılan TTL **30 dk**. `refund_request.created` yayar (`source: b2b`). |

### İade yaşam döngüsü (oluşturma-sonrası)

Her iki akış için de geçerlidir. Aşağıdaki uç noktalar, talep token'ı
üzerinde değil, iadenin kendisi üzerinde işlem yapar (id `rfn_…` ile başlar).

| Method | Path | Amaç | Notlar |
| --- | --- | --- | --- |
| `GET` | `/b2b/v1/refunds/{id}` | Bir iadeyi oku. | Durum: `PENDING` → `APPROVED` → `EXECUTED` \| `REJECTED`. |
| `GET` | `/b2b/v1/refunds/by-merchant/{merchant_id}` | İadelerinizi listele, cursor-paginated. | — |
| `POST` | `/b2b/v1/refunds/{id}/approve` | `PENDING` bir iadeyi onayla (yalnızca müşteri tarafından başlatılan — satıcı tarafından başlatılan zaten `APPROVED` ile gelir). | Kripto: `APPROVED`'a iner, sonrasında `/submit-tx` çağırırsınız. |
| `POST` | `/b2b/v1/refunds/{id}/reject` | `PENDING` bir iadeyi reddet. | `payment.refund.rejected` yayar. |
| `POST` | `/b2b/v1/refunds/{id}/submit-tx` | Yalnızca kripto — yaydığınız zincir üstü tx hash'i damgala. | Gövde: `{tx_hash, network, token_address}` — üçü de gereklidir. |

## Katalog (yalnızca-okuma)

| Method | Path | Amaç |
| --- | --- | --- |
| `GET` | `/v1/supported/networks` | InfraIO Pay'nun tahsilat yapabileceği tüm zincirler (mainnet + testnet, env tarafından filtrelenmiş). |
| `GET` | `/v1/supported/tokens` | Bu zincirler üzerindeki tüm stablecoinler. |
| `GET` | `/v1/supported/currencies` | `order.currency` için kabul edilen para birimleri. |

## Sağlık

| Method | Path | Auth | Amaç |
| --- | --- | --- | --- |
| `GET` | `/health` | Yok (public) | Canlılık kontrolü. `{"status":"ok"}` döndürür. Uptime monitörlerinizi buraya yönlendirin. |

## Cursor pagination

Her liste uç noktası aynı query parametrelerini kabul eder, aynı zarfı
döndürür. Cursor'lar opaktır ve offset yerine kullanılır; böylece sayfalama
sırasında yeni bir satır geldiğinde bir sayfa asla kaymaz.

| Query param | Tip | Varsayılan | Notlar |
| --- | --- | --- | --- |
| `cursor` | `string` | — | Opak — önceki yanıtın `next_cursor`'ını kelimesi kelimesine kopyalayın. |
| `limit` | `int` | `20` | `1..100`. |
| `sort_dir` | `'asc' \| 'desc'` | `desc` | `(created_at, id)` ile sırala. |
| `from` / `to` | `RFC3339` | — | Opsiyonel zaman penceresi filtresi. |
| `search` | `string` | — | Desteklenen yerlerde serbest metin filtresi. |

Yanıt zarfı:

```json
{
  "orders": [ /* sayfa satırları */ ],
  "next_cursor": "eyJjcmVhdGVkX2F0IjoiMjAyNi0wNS0...",
  "has_next": true
}
```

`has_next` her zaman mevcuttur. `has_next` `false` olduğunda `next_cursor`
atlanır. Cursor'ı opak bir string olarak ele alın.

## Bu sayfada eksik olan

Bu sayfa, satıcı entegrasyonları için tasarlanmış uç noktaları kapsar.
Listelenmeyen bir uç noktaya veya bir OpenAPI spec'ine ihtiyacınız varsa,
destek ekibiyle iletişime geçin.
