{
  "name": "Успешные ответы 201, 202 и 204",
  "description": "201 и 202 возвращают тело ответа; 204 (verifyCode) — без содержимого: результат null. verifyCode не принимает Idempotency-Key.",
  "client": {
    "api": "runtime",
    "credential": {"terminalKey": "lk_test_k7m2p9q4r8s3.RqTvNAJirupwDOPZ8O48PZpsbGlZGfecp04FD7w06kw"},
    "baseUrl": "https://api.example.com"
  },
  "calls": [
    {
      "operation": "registerReceipt",
      "args": {
        "body": {
          "number": "1043",
          "business_date": "2026-10-11",
          "purchased_at": "2026-10-11T14:59:58+03:00",
          "member": {"phone": "+79000000001"},
          "lines": [{"id": "1", "sku": "LATTE-M", "name": "Латте 300 мл", "quantity": 2000, "amount": 50000}],
          "cashier": "Иванова"
        }
      },
      "expect": {
        "result": {
          "id": "01929c1e-0051-7051-8051-000000000051",
          "status": "reserved",
          "number": "1043",
          "business_date": "2026-10-11",
          "purchased_at": "2026-10-11T14:59:58+03:00",
          "member": {
            "id": "01929c1e-0040-7040-8040-000000000040",
            "masked_phone": "+7 *** ***-00-01",
            "status": "active"
          },
          "points": {"point_type_id": "01929c1e-0011-7011-8011-000000000011", "precision": 0},
          "rules": {"snapshot_id": "01929c1e-0012-7012-8012-000000000012", "version": 3},
          "total": 50000,
          "discount": 0,
          "redeemed_money": 0,
          "redeemed_points": 0,
          "points_earned": 25,
          "payable": 50000,
          "max_redeemable_points": 1000,
          "redemption_confirmation_required": false,
          "lines": [
            {
              "id": "1",
              "amount": 50000,
              "discount": 0,
              "redeemed_money": 0,
              "redeemed_points": 0,
              "points_earned": 25,
              "payable": 50000,
              "returned_quantity": 0
            }
          ],
          "campaigns": [],
          "stamps": [],
          "explanation": [{"code": "accrual", "data": {"percent_bp": 500, "base": 50000, "points": 25}}],
          "reserved_until": "2026-10-11T12:29:58.000000Z",
          "confirmed_at": null
        }
      }
    },
    {
      "operation": "uploadOfflineReceipts",
      "args": {
        "body": {
          "receipts": [
            {
              "number": "0999",
              "business_date": "2026-10-10",
              "purchased_at": "2026-10-10T18:30:00+03:00",
              "member": {"card": "2000123456789"},
              "lines": [{"id": "1", "sku": "ESPRESSO", "quantity": 1000, "amount": 15000}]
            }
          ]
        }
      },
      "expect": {
        "result": {
          "id": "01929c1e-0060-7060-8060-000000000060",
          "status": "pending",
          "total": 1,
          "succeeded": 0,
          "failed": 0,
          "results": [],
          "created_at": "2026-10-11T12:10:00.000000Z",
          "completed_at": null
        }
      }
    },
    {
      "operation": "verifyCode",
      "args": {"verification": "01929c1e-0070-7070-8070-000000000070", "body": {"code": "000000"}},
      "expect": {
        "result": null,
        "meta": {"operationId": "verifyCode", "status": 204, "requestId": "01929c20-0003-7000-8000-000000000003"}
      }
    }
  ],
  "exchanges": [
    {
      "request": {
        "method": "POST",
        "url": "https://api.example.com/api/v1/receipts",
        "headers": {
          "authorization": "Bearer lk_test_k7m2p9q4r8s3.RqTvNAJirupwDOPZ8O48PZpsbGlZGfecp04FD7w06kw",
          "accept": "application/json",
          "content-type": "application/json",
          "idempotency-key": "{{idempotency-key}}",
          "loyal-merchant": null
        },
        "json": {
          "number": "1043",
          "business_date": "2026-10-11",
          "purchased_at": "2026-10-11T14:59:58+03:00",
          "member": {"phone": "+79000000001"},
          "lines": [{"id": "1", "sku": "LATTE-M", "name": "Латте 300 мл", "quantity": 2000, "amount": 50000}],
          "cashier": "Иванова"
        }
      },
      "response": {
        "status": 201,
        "headers": {
          "Content-Type": "application/json",
          "X-Request-Id": "01929c20-0001-7000-8000-000000000001",
          "Loyal-Environment": "sandbox",
          "Location": "https://api.example.com/api/v1/receipts/01929c1e-0051-7051-8051-000000000051"
        },
        "json": {
          "id": "01929c1e-0051-7051-8051-000000000051",
          "status": "reserved",
          "number": "1043",
          "business_date": "2026-10-11",
          "purchased_at": "2026-10-11T14:59:58+03:00",
          "member": {
            "id": "01929c1e-0040-7040-8040-000000000040",
            "masked_phone": "+7 *** ***-00-01",
            "status": "active"
          },
          "points": {"point_type_id": "01929c1e-0011-7011-8011-000000000011", "precision": 0},
          "rules": {"snapshot_id": "01929c1e-0012-7012-8012-000000000012", "version": 3},
          "total": 50000,
          "discount": 0,
          "redeemed_money": 0,
          "redeemed_points": 0,
          "points_earned": 25,
          "payable": 50000,
          "max_redeemable_points": 1000,
          "redemption_confirmation_required": false,
          "lines": [
            {
              "id": "1",
              "amount": 50000,
              "discount": 0,
              "redeemed_money": 0,
              "redeemed_points": 0,
              "points_earned": 25,
              "payable": 50000,
              "returned_quantity": 0
            }
          ],
          "campaigns": [],
          "stamps": [],
          "explanation": [{"code": "accrual", "data": {"percent_bp": 500, "base": 50000, "points": 25}}],
          "reserved_until": "2026-10-11T12:29:58.000000Z",
          "confirmed_at": null
        }
      }
    },
    {
      "request": {
        "method": "POST",
        "url": "https://api.example.com/api/v1/receipts:batch",
        "headers": {
          "authorization": "Bearer lk_test_k7m2p9q4r8s3.RqTvNAJirupwDOPZ8O48PZpsbGlZGfecp04FD7w06kw",
          "accept": "application/json",
          "content-type": "application/json",
          "idempotency-key": "{{idempotency-key}}",
          "loyal-merchant": null
        },
        "json": {
          "receipts": [
            {
              "number": "0999",
              "business_date": "2026-10-10",
              "purchased_at": "2026-10-10T18:30:00+03:00",
              "member": {"card": "2000123456789"},
              "lines": [{"id": "1", "sku": "ESPRESSO", "quantity": 1000, "amount": 15000}]
            }
          ]
        }
      },
      "response": {
        "status": 202,
        "headers": {
          "Content-Type": "application/json",
          "X-Request-Id": "01929c20-0002-7000-8000-000000000002",
          "Loyal-Environment": "sandbox"
        },
        "json": {
          "id": "01929c1e-0060-7060-8060-000000000060",
          "status": "pending",
          "total": 1,
          "succeeded": 0,
          "failed": 0,
          "results": [],
          "created_at": "2026-10-11T12:10:00.000000Z",
          "completed_at": null
        }
      }
    },
    {
      "request": {
        "method": "POST",
        "url": "https://api.example.com/api/v1/verifications/01929c1e-0070-7070-8070-000000000070:verify",
        "headers": {
          "authorization": "Bearer lk_test_k7m2p9q4r8s3.RqTvNAJirupwDOPZ8O48PZpsbGlZGfecp04FD7w06kw",
          "accept": "application/json",
          "content-type": "application/json",
          "idempotency-key": null,
          "loyal-merchant": null
        },
        "json": {"code": "000000"}
      },
      "response": {
        "status": 204,
        "headers": {"X-Request-Id": "01929c20-0003-7000-8000-000000000003", "Loyal-Environment": "sandbox"}
      }
    }
  ],
  "sleeps": []
}
