Adyen · Schema

BalanceInquiryResponse

It conveys the balance and the identification of the associated payment, loyalty or stored value account. Content of the Balance Inquiry Response message.

PaymentsFinancial ServicesFintechAgentic CommercePoint-of-SalePayment Processing

Properties

Name Type Description
Response object
PaymentAccountStatus object
LoyaltyAccountStatus object
PaymentReceipt array
View JSON Schema on GitHub

JSON Schema

adyen-balance-inquiry-response-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/adyen/main/json-schema/adyen-balance-inquiry-response-schema.json",
  "title": "BalanceInquiryResponse",
  "description": "It conveys the balance and the identification of the associated payment, loyalty or stored value account. Content of the Balance Inquiry Response message.",
  "x-generated": "2026-10-12",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/adyen-balanceinquiry-api-openapi.yml#/components/schemas/BalanceInquiryResponse",
  "type": "object",
  "properties": {
    "Response": {
      "$ref": "#/$defs/Response"
    },
    "PaymentAccountStatus": {
      "$ref": "#/$defs/PaymentAccountStatus"
    },
    "LoyaltyAccountStatus": {
      "$ref": "#/$defs/LoyaltyAccountStatus"
    },
    "PaymentReceipt": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PaymentReceipt"
      }
    }
  },
  "required": [
    "Response"
  ],
  "$defs": {
    "Alignment": {
      "type": "string",
      "enum": [
        "Centred",
        "Justified",
        "Left",
        "Right"
      ]
    },
    "AllowedProduct": {
      "type": "object",
      "description": "Product that is payable by the payment card. Product codes that are payable by the payment card.",
      "properties": {
        "ProductCode": {
          "type": "integer",
          "minimum": 1,
          "maximum": 20,
          "description": "Product code of item purchased with the transaction."
        },
        "EanUpc": {
          "type": "integer",
          "description": "Standard product code of item purchased with the transaction."
        },
        "ProductLabel": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Product name of an item purchased with the transaction."
        },
        "AdditionalProductInfo": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Additionl information related to the line item."
        }
      },
      "required": [
        "ProductCode"
      ]
    },
    "BarcodeType": {
      "type": "string",
      "enum": [
        "Code128",
        "Code25",
        "EAN13",
        "EAN8",
        "PDF417",
        "QRCode",
        "UPCA"
      ]
    },
    "CardData": {
      "type": "object",
      "description": "Allows acquisition of the card data by the Sale System before the Payment, CardAcquisition  or BalanceInquiry request to the POI. It could also be sent in the CardAcquisition response, to be processed by the Sale System. Information related to the payment card used for the transaction.",
      "properties": {
        "PaymentBrand": {
          "type": "string",
          "pattern": "^.+$",
          "description": "If card PAN is readable ."
        },
        "MaskedPan": {
          "type": "string",
          "pattern": "^.+$"
        },
        "PaymentAccountRef": {
          "type": "string",
          "pattern": "^.+$"
        },
        "EntryMode": {
          "$ref": "#/$defs/EntryMode"
        },
        "CardCountryCode": {
          "type": "integer",
          "minimum": 3,
          "maximum": 3,
          "description": "If available in the card."
        },
        "ProtectedCardData": {
          "type": "string",
          "description": "SensitiveCardData protected by CMS EnvelopedData."
        },
        "SensitiveCardData": {
          "$ref": "#/$defs/SensitiveCardData"
        },
        "AllowedProductCode": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          }
        },
        "AllowedProduct": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/AllowedProduct"
          }
        },
        "PaymentToken": {
          "$ref": "#/$defs/PaymentToken"
        },
        "CustomerOrder": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CustomerOrder"
          }
        }
      }
    },
    "CharacterHeight": {
      "type": "string",
      "enum": [
        "DoubleHeight",
        "HalfHeight",
        "SingleHeight"
      ]
    },
    "CharacterStyle": {
      "type": "string",
      "enum": [
        "Bold",
        "Italic",
        "Normal",
        "Underline"
      ]
    },
    "CharacterWidth": {
      "type": "string",
      "enum": [
        "DoubleWidth",
        "SingleWidth"
      ]
    },
    "CheckData": {
      "type": "object",
      "description": "Allows the check information to be provided by the Sale System before requesting the payment, or stored by the Sale System after processing of the payment. Information related to the paper check used for the transaction.",
      "properties": {
        "BankID": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Mandatory if TrackData absent."
        },
        "AccountNumber": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Mandatory if TrackData absent."
        },
        "CheckNumber": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Mandatory if TrackData absent."
        },
        "TrackData": {
          "$ref": "#/$defs/TrackData"
        },
        "CheckCardNumber": {
          "type": "string",
          "pattern": "^.+$",
          "description": "If provided by the customer."
        },
        "TypeCode": {
          "$ref": "#/$defs/TypeCode"
        },
        "Country": {
          "type": "string",
          "pattern": "^[A-Z]{3,3}$",
          "description": "Absent if country of the Sale system."
        }
      }
    },
    "Color": {
      "type": "string",
      "enum": [
        "Black",
        "Blue",
        "Cyan",
        "Green",
        "Magenta",
        "Red",
        "White",
        "Yellow"
      ]
    },
    "CustomerOrder": {
      "type": "object",
      "description": "Customer order attached to a customer, recorded in the POI system.  Allows the management of customer orders by the POI, for instance in a multi-channel or a click and collect sale transaction.",
      "properties": {
        "CustomerOrderID": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Additional and optional identification of a customer order."
        },
        "SaleReferenceID": {
          "type": "string",
          "pattern": "^.+$"
        },
        "OpenOrderState": {
          "type": "boolean",
          "default": true
        },
        "StartDate": {
          "type": "string",
          "format": "date-time",
          "description": "Date time of the beginning of an operation."
        },
        "EndDate": {
          "type": "string",
          "format": "date-time",
          "description": "Date time of the end of an operation."
        },
        "ForecastedAmount": {
          "type": "number",
          "maximum": 99999999.999999,
          "minimum": 0
        },
        "CurrentAmount": {
          "type": "number",
          "maximum": 99999999.999999,
          "minimum": 0,
          "description": "Total amount of all completed transactions of a customer order."
        },
        "Currency": {
          "type": "string",
          "pattern": "^[A-Z]{3,3}$",
          "description": "Currency of a monetary amount."
        },
        "AccessedBy": {
          "type": "string",
          "pattern": "^.+$"
        },
        "AdditionalInformation": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Unqualified information."
        }
      },
      "required": [
        "SaleReferenceID",
        "StartDate",
        "ForecastedAmount",
        "CurrentAmount"
      ]
    },
    "DocumentQualifier": {
      "type": "string",
      "enum": [
        "CashierReceipt",
        "CustomerReceipt",
        "Document",
        "Journal",
        "SaleReceipt",
        "Voucher"
      ]
    },
    "EntryMode": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "Contactless",
          "File",
          "ICC",
          "Keyed",
          "MagStripe",
          "Manual",
          "Mobile",
          "RFID",
          "Scanned",
          "SynchronousICC",
          "Tapped"
        ]
      }
    },
    "ErrorCondition": {
      "type": "string",
      "enum": [
        "Aborted",
        "Busy",
        "Cancel",
        "DeviceOut",
        "InProgress",
        "InsertedCard",
        "InvalidCard",
        "LoggedOut",
        "MessageFormat",
        "NotAllowed",
        "NotFound",
        "PaymentRestriction",
        "Refusal",
        "UnavailableDevice",
        "UnavailableService",
        "UnreachableHost",
        "WrongPIN"
      ]
    },
    "GeographicCoordinates": {
      "type": "object",
      "properties": {
        "Latitude": {
          "type": "string",
          "pattern": "^.+$"
        },
        "Longitude": {
          "type": "string",
          "pattern": "^.+$"
        }
      },
      "required": [
        "Latitude",
        "Longitude"
      ]
    },
    "Geolocation": {
      "type": "object",
      "properties": {
        "GeographicCoordinates": {
          "$ref": "#/$defs/GeographicCoordinates"
        },
        "UTMCoordinates": {
          "$ref": "#/$defs/UTMCoordinates"
        }
      }
    },
    "IdentificationSupport": {
      "type": "string",
      "enum": [
        "HybridCard",
        "LinkedCard",
        "LoyaltyCard",
        "NoCard"
      ]
    },
    "IdentificationType": {
      "type": "string",
      "enum": [
        "AccountNumber",
        "BarCode",
        "ISOTrack2",
        "PAN",
        "PhoneNumber"
      ]
    },
    "LoyaltyAccount": {
      "type": "object",
      "description": "This data structure conveys the identification of the account and the associated loyalty brand. Data related to a loyalty account processed in the transaction.",
      "properties": {
        "LoyaltyAccountID": {
          "$ref": "#/$defs/LoyaltyAccountID"
        },
        "LoyaltyBrand": {
          "type": "string",
          "pattern": "^.+$",
          "description": "If a card is analysed."
        }
      },
      "required": [
        "LoyaltyAccountID"
      ]
    },
    "LoyaltyAccountID": {
      "type": "object",
      "description": "In the Payment or the Loyalty Request message, it allows to identify the loyalty account by the Sale Terminal instead of the POI Terminal (e.g. because the account identification is a bar-code read by the Cashier on a scanner device). Identification of a Loyalty account.",
      "properties": {
        "EntryMode": {
          "$ref": "#/$defs/EntryMode"
        },
        "IdentificationType": {
          "$ref": "#/$defs/IdentificationType"
        },
        "IdentificationSupport": {
          "$ref": "#/$defs/IdentificationSupport"
        },
        "LoyaltyID": {
          "type": "string"
        }
      },
      "required": [
        "EntryMode",
        "IdentificationType",
        "LoyaltyID"
      ]
    },
    "LoyaltyAccountStatus": {
      "type": "object",
      "properties": {
        "LoyaltyAccount": {
          "$ref": "#/$defs/LoyaltyAccount"
        },
        "CurrentBalance": {
          "type": "number",
          "maximum": 99999999.999999,
          "minimum": 0
        },
        "LoyaltyUnit": {
          "$ref": "#/$defs/LoyaltyUnit"
        },
        "Currency": {
          "type": "string",
          "pattern": "^[A-Z]{3,3}$"
        }
      },
      "required": [
        "LoyaltyAccount"
      ]
    },
    "LoyaltyUnit": {
      "type": "string",
      "enum": [
        "Monetary",
        "Point"
      ]
    },
    "MobileData": {
      "type": "object",
      "description": "Mobile phone is used as a payment instrument for the transaction. Information related to the mobile for the payment transaction.",
      "properties": {
        "MobileCountryCode": {
          "type": "integer",
          "minimum": 3,
          "maximum": 3,
          "description": "If data available."
        },
        "MobileNetworkCode": {
          "type": "integer",
          "minimum": 2,
          "maximum": 3,
          "description": "If data available."
        },
        "MaskedMSISDN": {
          "type": "integer",
          "description": "If data available."
        },
        "Geolocation": {
          "$ref": "#/$defs/Geolocation"
        },
        "ProtectedMobileData": {
          "type": "string",
          "description": "SensitiveMobileData."
        },
        "SensitiveMobileData": {
          "$ref": "#/$defs/SensitiveMobileData"
        }
      }
    },
    "OutputBarcode": {
      "type": "object",
      "properties": {
        "BarcodeType": {
          "$ref": "#/$defs/BarcodeType"
        },
        "BarcodeValue": {
          "type": "string",
          "pattern": "^.+$"
        }
      },
      "required": [
        "BarcodeValue"
      ]
    },
    "OutputContent": {
      "type": "object",
      "description": "This is a sequence of elements if they have different formats. Content to display or print.",
      "properties": {
        "OutputFormat": {
          "$ref": "#/$defs/OutputFormat"
        },
        "PredefinedContent": {
          "$ref": "#/$defs/PredefinedContent"
        },
        "OutputText": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/OutputText"
          }
        },
        "OutputXHTML": {
          "type": "string",
          "format": "byte",
          "pattern": "^.{0,262144}$",
          "description": "Mandatory, if OutputFormat is XHTML, not allowed otherwise."
        },
        "OutputBarcode": {
          "$ref": "#/$defs/OutputBarcode"
        }
      },
      "required": [
        "OutputFormat"
      ]
    },
    "OutputFormat": {
      "type": "string",
      "enum": [
        "BarCode",
        "MessageRef",
        "Text",
        "XHTML"
      ]
    },
    "OutputText": {
      "type": "object",
      "description": "It conveys Information related to the content of the text message and its format. All the data elements related to the format of the text to display or print are parameters valid for the whole Text content. Content of text message to display or print.",
      "properties": {
        "Text": {
          "type": "string"
        },
        "CharacterSet": {
          "type": "integer"
        },
        "Font": {
          "type": "string",
          "pattern": "^.+$"
        },
        "StartRow": {
          "type": "integer",
          "minimum": 1,
          "maximum": 500
        },
        "StartColumn": {
          "type": "integer",
          "minimum": 1,
          "maximum": 500
        },
        "Color": {
          "$ref": "#/$defs/Color"
        },
        "CharacterWidth": {
          "$ref": "#/$defs/CharacterWidth"
        },
        "CharacterHeight": {
          "$ref": "#/$defs/CharacterHeight"
        },
        "CharacterStyle": {
          "$ref": "#/$defs/CharacterStyle"
        },
        "Alignment": {
          "$ref": "#/$defs/Alignment"
        },
        "EndOfLineFlag": {
          "type": "boolean",
          "default": true
        }
      },
      "required": [
        "Text"
      ]
    },
    "PaymentAccountStatus": {
      "type": "object",
      "properties": {
        "PaymentInstrumentData": {
          "$ref": "#/$defs/PaymentInstrumentData"
        },
        "CurrentBalance": {
          "type": "number",
          "maximum": 99999999.999999,
          "minimum": 0
        },
        "Currency": {
          "type": "string",
          "pattern": "^[A-Z]{3,3}$"
        },
        "PaymentAcquirerData": {
          "$ref": "#/$defs/PaymentAcquirerData"
        }
      }
    },
    "PaymentAcquirerData": {
      "type": "object",
      "description": "Data related to the response from the payment Acquirer.",
      "properties": {
        "AcquirerID": {
          "type": "integer",
          "description": "If several Acquirers."
        },
        "MerchantID": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Identification of the Merchant for the Acquirer."
        },
        "AcquirerPOIID": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Identification of the POI for the payment Acquirer."
        },
        "AcquirerTransactionID": {
          "$ref": "#/$defs/TransactionIDType"
        },
        "ApprovalCode": {
          "type": "string",
          "pattern": "^.+$",
          "description": "If available."
        },
        "HostReconciliationID": {
          "type": "string",
          "pattern": "^.+$"
        }
      },
      "required": [
        "MerchantID",
        "AcquirerPOIID"
      ]
    },
    "PaymentInstrumentData": {
      "type": "object",
      "description": "Sent in the result of the payment transaction. For a card, it could also be sent in the CardAcquisition response, to be processed by the Sale System. Data related to the instrument of payment for the transaction.",
      "properties": {
        "PaymentInstrumentType": {
          "$ref": "#/$defs/PaymentInstrumentType"
        },
        "ProtectedCardData": {
          "type": "string"
        },
        "CardData": {
          "$ref": "#/$defs/CardData"
        },
        "CheckData": {
          "$ref": "#/$defs/CheckData"
        },
        "MobileData": {
          "$ref": "#/$defs/MobileData"
        },
        "StoredValueAccountID": {
          "$ref": "#/$defs/StoredValueAccountID"
        }
      },
      "required": [
        "PaymentInstrumentType"
      ]
    },
    "PaymentInstrumentType": {
      "type": "string",
      "enum": [
        "Card",
        "Cash",
        "Check",
        "Mobile",
        "StoredValue"
      ]
    },
    "PaymentReceipt": {
      "type": "object",
      "description": "If the payment receipts are printed by the Sale system and the POI or the Sale does not implement the Print exchange (Basic profile). Customer or Merchant payment receipt.",
      "properties": {
        "DocumentQualifier": {
          "$ref": "#/$defs/DocumentQualifier"
        },
        "IntegratedPrintFlag": {
          "type": "boolean",
          "description": "Type of the print integrated to other prints."
        },
        "RequiredSignatureFlag": {
          "type": "boolean",
          "default": false,
          "description": "Indicate that the cardholder payment receipt requires a physical signature by the Customer."
        },
        "OutputContent": {
          "$ref": "#/$defs/OutputContent"
        }
      },
      "required": [
        "DocumentQualifier",
        "OutputContent"
      ]
    },
    "PaymentToken": {
      "type": "object",
      "description": "Surrogate of the PAN (Primary Account Number) of the payment card to  identify the payment mean of the customer. It allows, for a merchant, to identify   the customer.",
      "properties": {
        "TokenRequestedType": {
          "$ref": "#/$defs/TokenRequestedType"
        },
        "TokenValue": {
          "type": "string",
          "pattern": "^.+$"
        },
        "ExpiryDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "Expiry date and time. Limits the validity of a payment token."
        }
      },
      "required": [
        "TokenRequestedType",
        "TokenValue"
      ]
    },
    "PredefinedContent": {
      "type": "object",
      "description": "It conveys Information related to the predefined message. Reference of a predefined message to display or print.",
      "properties": {
        "ReferenceID": {
          "type": "string",
          "pattern": "^.+$",
          "description": "Identification of a predefined message to display or print."
        },
        "Language": {
          "type": "string",
          "pattern": "^[a-z]{2,2}$",
          "description": "Identification of a language."
        }
      },
      "required": [
        "ReferenceID"
      ]
    },
    "Response": {
      "type": "object",
      "description": "If Result is Success, ErrorCondition is absent or not used in the processing of the message. In the other cases, the ErrorCondition has to be present and can refine the processing of the message response. AdditionalResponse gives more information about the success or the failure of the message request processing, for logging without real time involvements. Result of a message request processing.",
      "properties": {
        "Result": {
          "$ref": "#/$defs/Result"
        },
        "ErrorCondition": {
          "$ref": "#/$defs/ErrorCondition"
        },
        "AdditionalResponse": {
          "type": "string",
          "pattern": "^.+$",
          "description": "If present, the POI logs it for further examination."
        }
      },
      "required": [
        "Result"
      ]
    },
    "Result": {
      "type": "string",
      "enum": [
        "Failure",
        "Partial",
        "Success"
      ]
    },
    "SensitiveCardData": {
      "type": "object",
      "description": "This data structure could be CMS protected (EnvelopedData). In this case the data structure SensitiveCardData is replaced by the data structure ProtectedCardData of type ContentInformationType. When this data is protected, the exact content is unknown by the Sale System, and might include all the information which are required by an external backup POI Server to make a batch payment transaction in case of problem with the POI System. Sensitive information related to the payment card, entered or read by the Sale System.",
      "properties": {
        "PAN": {
          "type": "integer",
          "minimum": 8,
          "maximum": 28
        },
        "CardSeqNumb": {
          "type": "integer",
          "minimum": 2,
          "maximum": 3,
          "description": "if EntryMode is File, Keyed or Manual."
        },
        "ExpiryDate": {
          "type": "integer",
          "minimum": 4,
          "maximum": 4,
          "description": "if EntryMode is File."
        },
        "TrackData": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/TrackData"
          }
        }
      }
    },
    "SensitiveMobileData": {
      "type": "object",
      "properties": {
        "MSISDN": {
          "type": "integer"
        },
        "ISMI": {
          "type": "integer"
        },
        "IMEI": {
          "type": "integer"
        }
      },
      "required": [
        "MSISDN"
      ]
    },
    "StoredValueAccountID": {
      "type": "object",
      "description": "It contains the identifications of the stored value account or the stored value card, and the associated product sold by the Sale System for stored value requests. Identification of the stored value account or the stored value card.",
      "properties": {
        "StoredValueAccountType": {
          "$ref": "#/$defs/StoredValueAccountType"
        },
        "StoredValueProvider": {
          "type": "string",
          "pattern": "^.+$"
        },
        "OwnerName": {
          "type": "string",
          "pattern": "^.+$"
        },
        "ExpiryDate": {
          "type": "integer",
          "minimum": 4,
          "maximum": 4
        },
        "EntryMode": {
          "$ref": "#/$defs/EntryMode"
        },
        "IdentificationType": {
          "$ref": "#/$defs/IdentificationType"
        },
        "StoredValueID": {
          "type": "string",
          "pattern": "^.+$"
        }
      },
      "required": [
        "StoredValueAccountType",
        "EntryMode",
        "IdentificationType",
        "StoredValueID"
      ]
    },
    "StoredValueAccountType": {
      "type": "string",
      "enum": [
        "GiftCard",
        "Other",
        "PhoneCard"
      ]
    },
    "TokenRequestedType": {
      "type": "string",
      "enum": [
        "Customer",
        "Transaction"
      ]
    },
    "TrackData": {
      "type": "object",
      "description": "ISO 7813 - ISO 4909.  Generic data structure for a card track, used when the magstripe card reader is located on the Sale Terminal, or for magstripe Card Reader device request. The data structure is also used to store the line at the bottom of a bank check. Magnetic track or magnetic ink characters line.",
      "properties": {
        "TrackNumb": {
          "type": "integer",
          "minimum": 1,
          "maximum": 3,
          "default": 2
        },
        "TrackFormat": {
          "$ref": "#/$defs/TrackFormat"
        },
        "TrackValue": {
          "type": "string",
          "pattern": "^.{1,104}$"
        }
      },
      "required": [
        "TrackValue"
      ]
    },
    "TrackFormat": {
      "type": "string",
      "enum": [
        "AAMVA",
        "ISO"
      ]
    },
    "TransactionIDType": {
      "type": "object",
      "description": "Identification of a transaction for the Sale System or the POI System.",
      "properties": {
        "TransactionID": {
          "type": "string",
          "pattern": "^.+$"
        },
        "TimeStamp": {
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "TransactionID",
        "TimeStamp"
      ]
    },
    "TypeCode": {
      "type": "string",
      "enum": [
        "Company",
        "Personal"
      ]
    },
    "UTMCoordinates": {
      "type": "object",
      "properties": {
        "UTMZone": {
          "type": "string",
          "pattern": "^.+$"
        },
        "UTMEastward": {
          "type": "string",
          "pattern": "^.+$"
        },
        "UTMNorthward": {
          "type": "string",
          "pattern": "^.+$"
        }
      },
      "required": [
        "UTMZone",
        "UTMEastward",
        "UTMNorthward"
      ]
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/adyen-balance-inquiry-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.