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

# E-Pos ödemesini tamamen iptal veya iade et

> Ödenmiş kaydın remainingMinor tutarının tamamını iptal/iade için gönderir.

## Ne yapar?

Ödenmiş kaydın remainingMinor tutarının tamamını iptal/iade için gönderir. Kısmi tutar 422 BANKPOS\_FULL\_RETURN\_REQUIRED üretir. Sağlayıcı sonucu voided veya refunded olarak doğrulanır; HTTP 200/operation.state=succeeded yalnız isteğin işlendiğini gösterir. Belirsiz sonuçta mevcut ödeme sorgulanır; yeni anahtarla tekrar mali işlem başlatılmaz. İptal/iade uygunluğu ve gün sonu koşulları sağlayıcıya bağlıdır.

## Ön koşullar ve izin

Gereken izin: **`muhasip:epos:write`**. Açık izin her durumda zorunludur; genel erişim veya yönetici yetkisi bunun yerine geçmez. `write` tek başına `read` sağlamaz. Firma kimlik bilgilerinden belirlenir; ilişkili kayıtlar aynı firmaya ait olmalıdır. Firma paketi ücretli ve süresi aktif olmalıdır.

[Kimlik ve izinler](https://docs.muhasip.pro/baslangic/kimlik-ve-izinler.md) · [E-Pos entegrasyonu](https://docs.muhasip.pro/rehberler/e-pos-entegrasyonu.md)

## İstek örnekleri

Örnekler temsilîdir. Kimlikleri, sürümleri ve işyeri bilgilerini kendi kayıtlarınızla değiştirin. Oranlar yüzde, `amountMinor` değerleri kuruştur. Gereken işlem anahtarını çağrıdan önce kalıcı saklayın; otomatik tekrar yapmayın. Gerçek işyeri anahtarını güvenli sunucu ortamından sağlayın. Node.js örneği Node.js 20 veya üzeri, PHP örneği cURL uzantısı gerektirir.

```bash cURL theme={null}
curl --request POST 'https://api.muhasip.pro/apps/bankpos/payments/600000000000000000000002/returns' \
  --user "$MUHASIP_API_USER_ID:$MUHASIP_API_SECRET" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --header "Idempotency-Key: $MUHASIP_IDEMPOTENCY_KEY" \
  --data-binary @- <<'JSON'
{
  "amountMinor": 10000
}
JSON
```

```php PHP theme={null}
<?php
$apiUserId = getenv("MUHASIP_API_USER_ID");
$secret = getenv("MUHASIP_API_SECRET");
if (!$apiUserId || !$secret) {
    throw new RuntimeException("API kimlik bilgileri eksik.");
}
$headers = ["Accept: application/json"];
$key = getenv("MUHASIP_IDEMPOTENCY_KEY");
if (!$key) { throw new RuntimeException("İşlem anahtarı eksik."); }
$headers[] = "Idempotency-Key: " . $key;
$headers[] = "Content-Type: application/json";
$body = <<<'JSON'
{
  "amountMinor": 10000
}
JSON;
$curl = curl_init("https://api.muhasip.pro/apps/bankpos/payments/600000000000000000000002/returns");
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD => $apiUserId . ":" . $secret,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_TIMEOUT => 100,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_POSTFIELDS => $body
]);
$response = curl_exec($curl);
$httpStatus = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($response === false) {
    curl_close($curl);
    throw new RuntimeException("Sonuç belirsiz; yeniden göndermeden işlem ve ödeme durumunu okuyun.");
}
curl_close($curl);
$result = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
// Ödeme bağlantısını veya gizli alanları günlüklemeyin.
echo json_encode(["httpStatus" => $httpStatus, "status" => $result["status"] ?? null, "id" => $result["result"]["_id"] ?? null, "operationId" => $result["operation"]["operationId"] ?? null], JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR);
```

```javascript Node.js theme={null}
async function main() {
  const apiUserId = process.env.MUHASIP_API_USER_ID
  const secret = process.env.MUHASIP_API_SECRET
  if (!apiUserId || !secret) throw new Error("API kimlik bilgileri eksik.")
  const headers = {
    Authorization: `Basic ${Buffer.from(`${apiUserId}:${secret}`, "utf8").toString("base64")}`,
    Accept: "application/json"
  }
  const key = process.env.MUHASIP_IDEMPOTENCY_KEY
  if (!key) throw new Error("İşlem anahtarı eksik.")
  headers["Idempotency-Key"] = key
  headers["Content-Type"] = "application/json"
  const body = {
    amountMinor: 10000
  }
  const response = await fetch("https://api.muhasip.pro/apps/bankpos/payments/600000000000000000000002/returns", {
    method: "POST",
    headers,
    redirect: "error",
    signal: AbortSignal.timeout(100000),
    body: JSON.stringify(body)
  })
  const result = await response.json()
  // Ödeme bağlantısını veya gizli alanları günlüklemeyin.
  console.log({
    httpStatus: response.status,
    status: result.status,
    id: result.result?._id,
    operationId: result.operation?.operationId
  })
}
main().catch(() => {
  console.error("Sonuç alınamadı; işlem/ödeme durumunu kontrol etmeden yeniden göndermeyin.")
  process.exitCode = 1
})
```

## Cevabı değerlendirin

Aşağıdaki cevap temsilîdir; varsa `url` alanı örnekte yer tutucudur. Uygulamada dönen adresi doğrudan kullanın ve günlüklemeyin.

`operation.state=succeeded`, ödeme veya iadenin mali olarak tamamlandığı anlamına gelmez. Ödeme kaydının `status`, `verification` ve iade geçmişini okuyun. Tamamlanmış tekrar cevabı ilk gövde yerine güvenli kimlikler döndürebilir.

```json theme={null}
{
  "status": true,
  "result": {
    "_id": "600000000000000000000002",
    "accountId": "600000000000000000000001",
    "reference": "600000000000000000000002",
    "status": "voided",
    "amountMinor": 10000,
    "amountEditable": true,
    "currency": "TRY",
    "pricingMode": "card",
    "saleRateMode": "family",
    "cardFamily": "paraf",
    "installmentOptions": [
      {
        "installment": 1,
        "saleRate": 0,
        "familySaleRates": []
      },
      {
        "installment": 3,
        "saleRate": 0,
        "familySaleRates": [
          {
            "family": "paraf",
            "saleRate": 0
          }
        ]
      }
    ],
    "expiresAt": "2026-10-25T09:30:00.000Z",
    "verification": "verified",
    "returnedMinor": 10000,
    "remainingMinor": 0,
    "activeReturnId": null,
    "returnOperations": [
      {
        "id": "600000000000000000000003",
        "amountMinor": 10000,
        "state": "verified",
        "kind": "void",
        "reason": null,
        "createdAt": "2026-10-25T09:00:00.000Z",
        "completedAt": "2026-10-25T09:00:00.000Z"
      }
    ],
    "reconciliation": {
      "checks": 0,
      "lastCheckedAt": null,
      "lastResult": null,
      "reason": null,
      "nextCheckAt": null
    },
    "startFailure": null,
    "url": "<yanıttan-alınan-ödeme-adresi>",
    "totalMinor": 10000,
    "saleCommissionMinor": 0,
    "purchaseCommissionMinor": 480,
    "netMinor": 9520,
    "installment": 3
  },
  "operation": {
    "operationId": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "type": "epos.return",
    "state": "succeeded",
    "reviewRequired": false,
    "retryable": false,
    "result": {
      "resultId": "600000000000000000000003",
      "paymentId": "600000000000000000000002"
    },
    "statusUrl": "/apps/operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
    "createdAt": "2026-10-25T09:00:00.000Z",
    "updatedAt": "2026-10-25T09:00:00.000Z"
  }
}
```

## Hata durumunda

| HTTP / kod | Yapılacak işlem |
| - | - |
| `400 BANKPOS_INVALID_REQUEST` | İstek, kimlik, filtre veya oran biçimini düzeltin. |
| `401 UNAUTHORIZED` | API kimliği, erişim süresi ve firma durumunu kontrol edin. |
| `403 API_SCOPE_FORBIDDEN` | Açık E-Pos iznini, firma/IP ve paket koşullarını kontrol edin. |
| `429` | İstek sıklığını azaltın; mali çağrıyı körlemesine tekrarlamayın. |
| `500 INTERNAL_ERROR` | İstek tamamlanamadı; yazma sonucunu kayıttan kontrol edin. |
| `404 BANKPOS_PAYMENT_NOT_FOUND` | Aynı firmaya ait ödeme kimliğini kullanın; sorgu için başlatılmış deneme gerekir. |
| `409 BANKPOS_RETURN_NOT_READY` | Ödeme/iade durumunu ve devam eden talebi okuyun. |
| `409 BANKPOS_QUERY_IN_PROGRESS` | Mevcut işlem tamamlanmadan yeni mali işlem başlatmayın. |
| `422 BANKPOS_FULL_RETURN_REQUIRED` | Güncel remainingMinor tutarının tamamını gönderin. |
| `503 BANKPOS_BRIDGE_UNAVAILABLE` | Bağlantı şu anda kullanılamıyor; mali isteği otomatik tekrarlamayın. |
| `400 IDEMPOTENCY_KEY_REQUIRED` | Çağrıdan önce kalıcı işlem anahtarını hazırlayın. |
| `409 IDEMPOTENCY_PAYLOAD_CONFLICT` | Aynı anahtarı farklı istekle kullanmayın. |
| `409 OPERATION_IN_PROGRESS` | Mevcut işlem makbuzunu okuyun. |
| `409 OPERATION_TARGET_LOCKED` | Mevcut ödeme ve işlem makbuzunu kontrol edin. |
| `502 UPSTREAM_RESULT_UNCERTAIN` | Sonuç belirsiz; yeni anahtarla mali işlemi tekrar başlatmayın. |
| `503 OPERATION_RECORD_UNAVAILABLE` | Varsa operationId ve ödeme kimliğiyle sonucu araştırın. |

[Hata yönetimi](https://docs.muhasip.pro/rehberler/hata-yonetimi.md) · [İşlem takibi](https://docs.muhasip.pro/rehberler/islem-takibi.md)

## Sonraki adım

[E-Pos entegrasyon akışını izleyin](https://docs.muhasip.pro/rehberler/e-pos-entegrasyonu.md). Hesap değişikliğinde dönen `revision` değerini saklayın; ödemede bağlantı oluşturmayı, müşterinin 3D işlemini ve doğrulanmış mali sonucu ayrı değerlendirin.


## OpenAPI

````yaml openapi.json POST /apps/bankpos/payments/{paymentId}/returns
openapi: 3.0.3
info:
  title: Muhasip API
  version: 2026-10-25.1
  description: >-
    Fatura, banka, POS ve tahsilat, GİB e-Arşiv, pazaryeri, online işlemler,
    görevler, ajanda ve takvim entegrasyonları. İşlem alanları, izinler, istek
    ve cevap örnekleri ile hata yönetimi.
servers:
  - url: https://api.muhasip.pro
    description: Muhasip API
security:
  - BasicAuth: []
tags:
  - name: Uygulamalar
  - name: Görev yönetimi
  - name: Ajanda ve takvim
  - name: Fatura
    description: Fatura bağlantısı, belge işlemleri ve muhasebeye aktarım.
  - name: Banka
    description: >-
      Banka hesapları, hareketler, mahsup ve mevcut çalışma alanı alt
      kaynakları.
  - name: POS ve tahsilat
    description: POS hesapları, komisyonlar ve tahsilat bağlantıları.
  - name: GİB e-Arşiv
    description: GİB hesabı, sorgu, taslak ve SMS imzalama.
  - name: Pazaryeri
    description: Trendyol bağlantısı ve sipariş aktarımı.
  - name: Online işlemler
    description: Online işlem ekranı yapılandırması.
  - name: İşlem takibi
    description: Mali işlem durumu ve tekrar çağrı makbuzları.
  - name: Cari hesaplar
    description: Cari hesaplar işlemleri.
  - name: Kasa ve transferler
    description: Kasa ve transferler işlemleri.
  - name: Alış-satış (e-belgesiz)
    description: Alış-satış (e-belgesiz) işlemleri.
  - name: Ödemeler ve mahsuplaşma
    description: Ödemeler ve mahsuplaşma işlemleri.
  - name: Muhasebe seçenekleri
    description: Muhasebe seçenekleri işlemleri.
  - name: E-Pos
    description: >-
      Firmanın kendi banka/ödeme kuruluşu sanal POS hesapları, tarifeler, ödeme
      talepleri ve tam iptal/iade.
paths:
  /apps/bankpos/payments/{paymentId}/returns:
    post:
      tags:
        - E-Pos
      summary: E-Pos ödemesini tamamen iptal veya iade et
      description: >-
        Ödenmiş kaydın remainingMinor tutarının tamamını iptal/iade için
        gönderir. Kısmi tutar 422 BANKPOS_FULL_RETURN_REQUIRED üretir. Sağlayıcı
        sonucu voided veya refunded olarak doğrulanır; HTTP
        200/operation.state=succeeded yalnız isteğin işlendiğini gösterir.
        Belirsiz sonuçta mevcut ödeme sorgulanır; yeni anahtarla tekrar mali
        işlem başlatılmaz. İptal/iade uygunluğu ve gün sonu koşulları
        sağlayıcıya bağlıdır.
      operationId: eposReturnPayment
      parameters:
        - name: paymentId
          in: path
          required: true
          schema:
            type: string
            pattern: ^[a-fA-F0-9]{24}$
            description: Aynı firmaya ait 24 haneli kayıt kimliği.
        - name: Idempotency-Key
          in: header
          required: true
          schema:
            type: string
            minLength: 1
            maxLength: 128
            pattern: ^[!-~]+$
          description: >-
            İş niyetine ait kalıcı anahtar. Farklı işlerde yeniden kullanmayın.
            Aynı anahtar ve farklı içerik 409 döndürür.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EposReturnRequest'
            example:
              amountMinor: 10000
      responses:
        '200':
          description: İşlem cevabı; örnek temsilîdir.
          content:
            application/json:
              schema:
                anyOf:
                  - type: object
                    properties:
                      status:
                        type: boolean
                        enum:
                          - true
                      result:
                        $ref: '#/components/schemas/EposPayment'
                      operation:
                        $ref: '#/components/schemas/ApiOperation'
                    additionalProperties: false
                    required:
                      - status
                      - result
                      - operation
                  - $ref: '#/components/schemas/ApiOperationReplay'
              example:
                status: true
                result:
                  _id: '600000000000000000000002'
                  accountId: '600000000000000000000001'
                  reference: '600000000000000000000002'
                  status: voided
                  amountMinor: 10000
                  amountEditable: true
                  currency: TRY
                  pricingMode: card
                  saleRateMode: family
                  cardFamily: paraf
                  installmentOptions:
                    - installment: 1
                      saleRate: 0
                      familySaleRates: []
                    - installment: 3
                      saleRate: 0
                      familySaleRates:
                        - family: paraf
                          saleRate: 0
                  expiresAt: '2026-10-25T09:30:00.000Z'
                  verification: verified
                  returnedMinor: 10000
                  remainingMinor: 0
                  activeReturnId: null
                  returnOperations:
                    - id: '600000000000000000000003'
                      amountMinor: 10000
                      state: verified
                      kind: void
                      reason: null
                      createdAt: '2026-10-25T09:00:00.000Z'
                      completedAt: '2026-10-25T09:00:00.000Z'
                  reconciliation:
                    checks: 0
                    lastCheckedAt: null
                    lastResult: null
                    reason: null
                    nextCheckAt: null
                  startFailure: null
                  url: <yanıttan-alınan-ödeme-adresi>
                  totalMinor: 10000
                  saleCommissionMinor: 0
                  purchaseCommissionMinor: 480
                  netMinor: 9520
                  installment: 3
                operation:
                  operationId: >-
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  type: epos.return
                  state: succeeded
                  reviewRequired: false
                  retryable: false
                  result:
                    resultId: '600000000000000000000003'
                    paymentId: '600000000000000000000002'
                  statusUrl: >-
                    /apps/operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  createdAt: '2026-10-25T09:00:00.000Z'
                  updatedAt: '2026-10-25T09:00:00.000Z'
        '400':
          description: İşlem cevabı; örnek temsilîdir.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: BANKPOS_INVALID_REQUEST
                message: İstek alanları geçersiz.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: >-
            BANKPOS_RETURN_NOT_READY · BANKPOS_QUERY_IN_PROGRESS ·
            IDEMPOTENCY_PAYLOAD_CONFLICT · OPERATION_IN_PROGRESS ·
            OPERATION_TARGET_LOCKED. İlgili kaydı ve işlem durumunu kontrol
            edin.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: OPERATION_IN_PROGRESS
                message: İşlemi tekrar göndermeden durumunu kontrol edin.
                retryable: false
                reviewRequired: true
                operation:
                  operationId: >-
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  type: epos.return
                  state: review_required
                  reviewRequired: true
                  retryable: false
                  result:
                    resultId: '600000000000000000000003'
                    paymentId: '600000000000000000000002'
                  statusUrl: >-
                    /apps/operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  createdAt: '2026-10-25T09:00:00.000Z'
                  updatedAt: '2026-10-25T09:00:00.000Z'
        '422':
          description: >-
            BANKPOS_FULL_RETURN_REQUIRED. İlgili kaydı ve işlem durumunu kontrol
            edin.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: BANKPOS_ACCOUNT_NOT_READY
                message: İşlemin ön koşulları sağlanmadı.
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          description: İşlem cevabı; örnek temsilîdir.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: INTERNAL_ERROR
                message: İşlem gerçekleştirilemedi.
        '502':
          description: >-
            UPSTREAM_RESULT_UNCERTAIN. İlgili kaydı ve işlem durumunu kontrol
            edin.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: UPSTREAM_RESULT_UNCERTAIN
                message: İşlemi tekrar göndermeden durumunu kontrol edin.
                retryable: false
                reviewRequired: true
                operation:
                  operationId: >-
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  type: epos.return
                  state: review_required
                  reviewRequired: true
                  retryable: false
                  result:
                    resultId: '600000000000000000000003'
                    paymentId: '600000000000000000000002'
                  statusUrl: >-
                    /apps/operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  createdAt: '2026-10-25T09:00:00.000Z'
                  updatedAt: '2026-10-25T09:00:00.000Z'
        '503':
          description: >-
            BANKPOS_BRIDGE_UNAVAILABLE · OPERATION_RECORD_UNAVAILABLE. İlgili
            kaydı ve işlem durumunu kontrol edin.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EposError'
              example:
                status: false
                code: OPERATION_RECORD_UNAVAILABLE
                message: İşlemi tekrar göndermeden durumunu kontrol edin.
                retryable: false
                reviewRequired: true
                operation:
                  operationId: >-
                    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  type: epos.return
                  state: review_required
                  reviewRequired: true
                  retryable: false
                  result:
                    resultId: '600000000000000000000003'
                    paymentId: '600000000000000000000002'
                  statusUrl: >-
                    /apps/operations/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                  createdAt: '2026-10-25T09:00:00.000Z'
                  updatedAt: '2026-10-25T09:00:00.000Z'
components:
  schemas:
    EposReturnRequest:
      type: object
      properties:
        amountMinor:
          type: integer
          minimum: 1
          maximum: 9007199254740991
          description: >-
            Güncel remainingMinor değerinin tamamına eşit olmalıdır; kısmi iade
            desteklenmez.
      additionalProperties: false
      required:
        - amountMinor
    EposPayment:
      type: object
      properties:
        _id:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: Aynı firmaya ait 24 haneli kayıt kimliği.
        accountId:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: Aynı firmaya ait 24 haneli kayıt kimliği.
        reference:
          type: string
        status:
          type: string
          enum:
            - open
            - processing
            - not_found
            - failed
            - paid
            - partially_refunded
            - refunded
            - voided
            - expired
            - cancelled
        amountMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        totalMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        saleCommissionMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        purchaseCommissionMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        netMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        remainingMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
          nullable: true
        amountEditable:
          type: boolean
        currency:
          type: string
          enum:
            - TRY
        installment:
          type: integer
          minimum: 1
          maximum: 12
          nullable: true
        pricingMode:
          type: string
          enum:
            - card
            - fixed
        saleRateMode:
          type: string
          enum:
            - family
            - installment
        cardFamily:
          type: string
          pattern: ^[a-z0-9_-]{1,40}$
          description: Kart ailesi kodu. __proto__, prototype ve constructor kullanılamaz.
          nullable: true
        installmentOptions:
          type: array
          items:
            $ref: '#/components/schemas/EposPaymentOptionResult'
        expiresAt:
          type: string
          format: date-time
        verification:
          type: string
        returnedMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
        activeReturnId:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: Aynı firmaya ait 24 haneli kayıt kimliği.
          nullable: true
        returnOperations:
          type: array
          items:
            $ref: '#/components/schemas/EposReturnOperation'
        reconciliation:
          $ref: '#/components/schemas/EposReconciliation'
        startFailure:
          type: object
          properties:
            phase:
              type: string
            code:
              type: string
            at:
              type: string
              format: date-time
          additionalProperties: false
          nullable: true
        url:
          type: string
          description: >-
            Müşteriye iletilecek ödeme bağlantısı. Yanıttaki adresi kullanın;
            kendiniz üretmeyin ve günlüklemeyin.
        purchaseRate:
          type: number
          minimum: 0
          maximum: 100
          multipleOf: 0.0001
          description: >-
            Yüzde oranı; en fazla dört ondalık. 1.49 = %1,49; açık 0 komisyonsuz
            satıştır.
          nullable: true
        saleRate:
          type: number
          minimum: 0
          maximum: 100
          multipleOf: 0.0001
          description: >-
            Yüzde oranı; en fazla dört ondalık. 1.49 = %1,49; açık 0 komisyonsuz
            satıştır.
          nullable: true
        canQuery:
          type: boolean
        canReturn:
          type: boolean
        partialReturnRestricted:
          type: boolean
        replayed:
          type: boolean
      additionalProperties: false
      required:
        - _id
        - accountId
        - reference
        - status
        - currency
        - amountEditable
        - pricingMode
        - saleRateMode
        - installmentOptions
        - expiresAt
        - verification
        - returnedMinor
        - returnOperations
    ApiOperation:
      type: object
      properties:
        operationId:
          type: string
          pattern: ^[a-f0-9]{64}$
        type:
          type: string
        state:
          type: string
          enum:
            - claimed
            - dispatching
            - provider_accepted
            - succeeded
            - rejected
            - failed_before_dispatch
            - review_required
        reviewRequired:
          type: boolean
        retryable:
          type: boolean
        result:
          $ref: '#/components/schemas/ApiOperationReceipt'
        statusUrl:
          type: string
        createdAt:
          type: string
          format: date-time
          description: ISO 8601 tarih-saat.
        updatedAt:
          type: string
          format: date-time
          description: ISO 8601 tarih-saat.
      required:
        - operationId
        - type
        - state
        - reviewRequired
        - retryable
        - result
        - statusUrl
        - createdAt
        - updatedAt
    ApiOperationReplay:
      type: object
      properties:
        status:
          type: boolean
        replayed:
          type: boolean
          enum:
            - true
        operation:
          $ref: '#/components/schemas/ApiOperation'
        operations:
          type: array
          items:
            $ref: '#/components/schemas/ApiOperation'
        resultId:
          type: string
        transactionId:
          type: string
        uuid:
          type: string
        id:
          type: string
        providerId:
          type: string
        documentId:
          type: string
        paymentId:
          type: string
        orderId:
          type: string
        uuids:
          type: array
          items:
            type: string
        sourcePaymentId:
          type: string
          description: 24 karakterli kayıt kimliği.
          pattern: ^[a-f0-9A-F]{24}$
        destinationPaymentId:
          type: string
          description: 24 karakterli kayıt kimliği.
          pattern: ^[a-f0-9A-F]{24}$
      required:
        - status
        - replayed
        - operation
        - operations
      additionalProperties: false
    EposError:
      type: object
      properties:
        status:
          type: boolean
          enum:
            - false
        code:
          type: string
        message:
          type: string
        operation:
          $ref: '#/components/schemas/ApiOperation'
        operationId:
          type: string
        operationIds:
          type: array
          items:
            type: string
        retryable:
          type: boolean
        reviewRequired:
          type: boolean
      additionalProperties: true
      required:
        - status
        - code
        - message
    EposPaymentOptionResult:
      type: object
      properties:
        installment:
          type: integer
          minimum: 1
          maximum: 12
        saleRate:
          type: number
          minimum: 0
          maximum: 100
          multipleOf: 0.0001
          description: >-
            Yüzde oranı; en fazla dört ondalık. 1.49 = %1,49; açık 0 komisyonsuz
            satıştır.
        familySaleRates:
          type: array
          items:
            $ref: '#/components/schemas/EposPaymentFamilyRate'
        totalMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
        saleCommissionMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
      additionalProperties: false
      required:
        - installment
        - saleRate
        - familySaleRates
    EposReturnOperation:
      type: object
      properties:
        id:
          type: string
          pattern: ^[a-fA-F0-9]{24}$
          description: Aynı firmaya ait 24 haneli kayıt kimliği.
        amountMinor:
          type: integer
          minimum: 0
          maximum: 9007199254740991
          description: Kuruş cinsinden tamsayı. 100 TL = 10000.
        state:
          type: string
          enum:
            - reserved
            - submitted
            - accepted
            - uncertain
            - not_found
            - rejected
            - verified
            - not_sent
        kind:
          type: string
          enum:
            - void
            - refund
          nullable: true
        reason:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        completedAt:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
      required:
        - id
        - amountMinor
        - state
    EposReconciliation:
      type: object
      properties:
        checks:
          type: integer
          minimum: 0
        lastCheckedAt:
          type: string
          format: date-time
          nullable: true
        lastResult:
          type: string
          nullable: true
        reason:
          type: string
          nullable: true
        nextCheckAt:
          type: string
          format: date-time
          nullable: true
      additionalProperties: false
    ApiOperationReceipt:
      type: object
      properties:
        resultId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        transactionId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        uuid:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        id:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        providerId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        documentId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        paymentId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        orderId:
          type: string
          minLength: 1
          maxLength: 200
          pattern: ^[A-Za-z0-9_.:-]+$
        uuids:
          type: array
          items:
            type: string
            maxLength: 200
            pattern: ^[A-Za-z0-9_.:-]+$
          maxItems: 100
        sourcePaymentId:
          type: string
          description: 24 karakterli kayıt kimliği.
          pattern: ^[a-f0-9A-F]{24}$
        destinationPaymentId:
          type: string
          description: 24 karakterli kayıt kimliği.
          pattern: ^[a-f0-9A-F]{24}$
      additionalProperties: false
    Error:
      type: object
      properties:
        status:
          type: boolean
        code:
          type: string
        message:
          type: string
        description:
          type: string
        retryable:
          type: boolean
        reviewRequired:
          type: boolean
        operationId:
          type: string
      required:
        - status
      additionalProperties: true
    RateLimitError:
      type: object
      properties:
        status:
          type: integer
          enum:
            - 429
        error:
          type: string
        message:
          type: string
      required:
        - status
        - error
        - message
    EposPaymentFamilyRate:
      type: object
      properties:
        family:
          type: string
          pattern: ^[a-z0-9_-]{1,40}$
          description: Kart ailesi kodu. __proto__, prototype ve constructor kullanılamaz.
        saleRate:
          type: number
          minimum: 0
          maximum: 100
          multipleOf: 0.0001
          description: >-
            Yüzde oranı; en fazla dört ondalık. 1.49 = %1,49; açık 0 komisyonsuz
            satıştır.
      additionalProperties: false
      required:
        - family
        - saleRate
  responses:
    Unauthorized:
      description: API kimliği/parolası, erişim süresi veya firma doğrulanamadı.
      headers:
        WWW-Authenticate:
          schema:
            type: string
          description: Basic realm="Muhasip API", charset="UTF-8"
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
            code: UNAUTHORIZED
            message: API kimlik bilgileri doğrulanamadı.
    Forbidden:
      description: Ürün, IP, modül izni veya kaynak kapsamı uygun değil.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
            message: Ürün, IP, modül izni veya kaynak kapsamı uygun değil.
    NotFound:
      description: Kayıt bulunamadı veya bu erişim bağlamında kullanılamıyor.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: false
    RateLimited:
      description: Ortak istek sınırı aşıldı; sayısal status alanı kullanılır.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RateLimitError'
          example:
            status: 429
            error: Too Many Requests
            message: Rate limit exceeded. Please try again later.
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >-
        Kullanıcı adı apiUserId, parola secretKey. Aktif ve süresi geçmemiş API
        kullanıcısı ve uygun firma gerekir.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.