{
  "iface": "futoin.xfer.retail",
  "version": "1.0",
  "ftn3rev": "1.7",
  "imports": [
    "futoin.ping:1.0",
    "futoin.xfer.types:1.0"
  ],
  "funcs": {
    "purchase": {
      "params": {
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "ext_id": "XferExtID",
        "ext_info": "XferExtInfo",
        "orig_ts": "XferTimestamp",
        "fee": {
          "type": "Fee",
          "default": null
        },
        "rel_preauth": {
          "type": "XferID",
          "default": null
        }
      },
      "result": {
        "xfer_id": "XferID",
        "wait_user": "boolean"
      },
      "throws": [
        "UnknownAccountID",
        "CurrencyMismatch",
        "InvalidAmount",
        "LimitReject",
        "AlreadyCanceled",
        "OriginalTooOld",
        "OriginalMismatch",
        "UnavailablePreAuth"
      ]
    },
    "cancelPurchase": {
      "params": {
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "ext_id": "XferExtID",
        "ext_info": "XferExtInfo",
        "orig_ts": "XferTimestamp",
        "fee": {
          "type": "Fee",
          "default": null
        },
        "reason": "Reason"
      },
      "result": "boolean",
      "throws": [
        "UnknownAccountID",
        "CurrencyMismatch",
        "InvalidAmount",
        "LimitReject",
        "OriginalTooOld",
        "OriginalMismatch",
        "AlreadyRefunded"
      ]
    },
    "confirmPurchase": {
      "params": {
        "xfer_id": "XferID",
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "orig_ts": "XferTimestamp",
        "fee": {
          "type": "Fee",
          "default": null
        }
      },
      "result": "boolean",
      "throws": [
        "UnknownXferID",
        "AlreadyCanceled",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "rejectPurchase": {
      "params": {
        "xfer_id": "XferID",
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "orig_ts": "XferTimestamp",
        "fee": {
          "type": "Fee",
          "default": null
        }
      },
      "result": "boolean",
      "throws": [
        "UnknownXferID",
        "AlreadyCompleted",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "refund": {
      "params": {
        "purchase_id": "XferID",
        "purchase_ts": "XferTimestamp",
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "ext_id": "XferExtID",
        "ext_info": "XferExtInfo",
        "orig_ts": "XferTimestamp"
      },
      "result": "boolean",
      "throws": [
        "CurrencyMismatch",
        "NotEnoughFunds",
        "AmountTooLarge",
        "PurchaseNotFound",
        "AlreadyCanceled",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "preAuth": {
      "params": {
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "ext_id": "XferExtID",
        "ext_info": "XferExtInfo",
        "orig_ts": "XferTimestamp"
      },
      "result": {
        "xfer_id": "XferID",
        "wait_user": "boolean"
      },
      "throws": [
        "UnknownAccountID",
        "CurrencyMismatch",
        "InvalidAmount",
        "LimitReject",
        "AlreadyCanceled",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "clearPreAuth": {
      "params": {
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "ext_id": "XferExtID",
        "ext_info": "XferExtInfo",
        "orig_ts": "XferTimestamp"
      },
      "result": "boolean",
      "throws": [
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "confirmPreAuth": {
      "params": {
        "xfer_id": "XferID",
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "orig_ts": "XferTimestamp"
      },
      "result": "boolean",
      "throws": [
        "UnknownXferID",
        "AlreadyCanceled",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    },
    "rejectPreAuth": {
      "params": {
        "xfer_id": "XferID",
        "account": "AccountID",
        "rel_account": "AccountID",
        "currency": "CurrencyCode",
        "amount": "Amount",
        "orig_ts": "XferTimestamp"
      },
      "result": "boolean",
      "throws": [
        "UnknownXferID",
        "AlreadyCompleted",
        "OriginalTooOld",
        "OriginalMismatch"
      ]
    }
  },
  "requires": [
    "SecureChannel"
  ]
}