<?xml version ='1.0' encoding ='UTF-8' ?>
<definitions name='VirWoX'
  targetNamespace='http://virwox.com/VirWoX'
  xmlns:tns='http://virwox.com/VirWoX'
  xmlns:types='http://virwox.com/types/VirWoX'
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema.xsd'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>

<types>
  <xsd:schema targetNamespace='http://virwox.com/types/VirWoX'>
    <xsd:simpleType name='Amount'>
      <xsd:restriction base='xsd:decimal'>
        <xsd:totalDigits value='11'/>
        <xsd:fractionDigits value='2'/>
      </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name='ErrorEnum'>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='OK'/>
        <xsd:enumeration value='INVALID_USERNAME_OR_PASSWORD'/>
        <xsd:enumeration value='NO_TARGET_CUSTOMER'/>
        <xsd:enumeration value='NO_SOURCE_ACCOUNT_FOR_THIS_CURRENCY'/>
        <xsd:enumeration value='NO_TARGET_ACCOUNT_FOR_THIS_CURRENCY'/>
        <xsd:enumeration value='INVALID_AMOUNT_OR_PRICE'/>
        <xsd:enumeration value='INSUFFICIENT_FUNDS'/>
        <xsd:enumeration value='NO_SUCH_INSTRUMENT'/>
        <xsd:enumeration value='NO_SUCH_ORDER'/>
        <xsd:enumeration value='INVALID_ORDER_TYPE'/>
        <xsd:enumeration value='DATABASE_TIMEOUT'/>
        <xsd:enumeration value='NOT_UNIQUE'/>
        <xsd:enumeration value='ILLEGAL_PARAMETER'/>
        <xsd:enumeration value='MANUAL_INTERVENTION_REQUIRED'/>
        <xsd:enumeration value='ACCOUNT_DISABLED'/>
        <xsd:enumeration value='LIMIT_EXCEEDED'/>
        <xsd:enumeration value='INSUFFICIENT_LIQUIDITY'/>
        <xsd:enumeration value='PRICE_CHANGED'/>
        <xsd:enumeration value='COULD_NOT_SEND_EMAIL'/>
        <xsd:enumeration value='PAYPAL_API_ERROR'/>
        <xsd:enumeration value='NETELLER_API_ERROR'/>
        <xsd:enumeration value='PSC_API_ERROR'/>
      </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name='BoolEnum'>
      <xsd:restriction base='xsd:string'>
        <xsd:enumeration value='N'/>
        <xsd:enumeration value='Y'/>
      </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name='InstrumentList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:Instrument[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='SymbolList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='xsd:string[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='BestPriceList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:BestPriceItem[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='BestPriceItem'>
      <xsd:sequence>
        <xsd:element name='errorCode' type='types:ErrorEnum'/>
        <xsd:element name='symbol' type='xsd:string'/>
        <xsd:element name='bestBuyPrice' type='xsd:double'/>
        <xsd:element name='bestSellPrice' type='xsd:double'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='Instrument'>
      <xsd:sequence>
        <xsd:element name='symbol' type='xsd:string'/>
        <xsd:element name='longCurrency' type='xsd:string'/>
        <xsd:element name='shortCurrency' type='xsd:string'/>
        <xsd:element name='decimals' type='xsd:int'/>
        <xsd:element name='commissionRate' type='xsd:double'/>
        <xsd:element name='commissionRateMkt' type='xsd:double'/>
        <xsd:element name='commissionConstMkt' type='xsd:double'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='MarketDepthList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:MarketDepthItem[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='MarketDepthItem'>
      <xsd:complexContent>
        <xsd:extension base='types:BestPriceItem'>
          <xsd:sequence>
            <xsd:element name='buy' nillable='true' type='PriceVolumeList'/>
            <xsd:element name='sell' nillable='true' type='PriceVolumeList'/>
          </xsd:sequence>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='PriceVolumeList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:PriceVolumeItem[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='PriceVolumeItem'>
      <xsd:sequence>
        <xsd:element name='price' type='xsd:double'/>
        <xsd:element name='volume' type='xsd:int'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='HLOCPriceVolumeList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:HLOCPriceVolumeItem[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='HLOCPriceVolumeItem'>
      <xsd:sequence>
        <xsd:element name='longVolume' type='xsd:int'/>
        <xsd:element name='shortVolume' type='xsd:int'/>
        <xsd:element name='high' nillable='true' type='xsd:double'/>
        <xsd:element name='low' nillable='true' type='xsd:double'/>
        <xsd:element name='open' nillable='true' type='xsd:double'/>
        <xsd:element name='close' nillable='true' type='xsd:double'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='TradeDataList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:TradeDataItem[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='TradeDataItem'>
      <xsd:sequence>
        <xsd:element name='time' type='xsd:int'/>
        <xsd:element name='price' type='xsd:double'/>
        <xsd:element name='vol' type='xsd:int'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='TerminalList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:Terminal[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='Terminal'>
      <xsd:sequence>
        <xsd:element name='atmID' type='xsd:int'/>
        <xsd:element name='public' type='types:BoolEnum'/>
        <xsd:element name='busy' type='types:BoolEnum'/>
        <xsd:element name='region' type='xsd:string'/>
        <xsd:element name='gridName' type='xsd:string'/>
        <xsd:element name='x' type='xsd:int'/>
        <xsd:element name='y' type='xsd:int'/>
        <xsd:element name='z' type='xsd:int'/>
        <xsd:element name='language' nillable='true' type='xsd:string'/>
        <xsd:element name='lastRequest' nillable='true' type='xsd:string'/>
        <xsd:element name='nextRequest' nillable='true' type='xsd:string'/>
        <xsd:element name='delta' type='xsd:int'/>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name='GridList'>
      <xsd:complexContent>
        <restriction base='soapenc:Array'>
          <attribute ref='soapenc:arrayType' wsdl:arrayType='types:Grid[]'/>
        </restriction>
      </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name='Grid'>
      <xsd:sequence>
        <xsd:element name='gridID' type='xsd:int'/>
        <xsd:element name='shortName' type='xsd:string'/>
        <xsd:element name='longName' type='xsd:string'/>
        <xsd:element name='loginURL' type='xsd:string'/>
        <xsd:element name='wwwURL' type='xsd:string'/>
        <xsd:element name='defaultCurrency' type='xsd:string'/>
        <xsd:element name='active' type='types:BoolEnum'/>
        <xsd:element name='registered' type='xsd:int'/>
        <xsd:element name='validated' type='xsd:int'/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:schema>
</types>

<message name='getInstrumentsOut'>
  <part name='instruments' type='types:InstrumentList'/>
</message>
<message name='getBestPricesIn'>
  <part name='instruments' type='types:SymbolList'/>
</message>
<message name='getBestPricesOut'>
  <part name='result' type='types:BestPriceList'/>
</message>
<message name='getMarketDepthIn'>
  <part name='instruments' type='types:SymbolList'/>
  <part name='buyDepth' nillable='true' type='xsd:int'/>
  <part name='sellDepth' nillable='true' type='xsd:int'/>
</message>
<message name='getMarketDepthOut'>
  <part name='result' type='types:MarketDepthList'/>
</message>
<message name='estimateMarketOrderIn'>
  <part name='orderType' type='types:OrderTypeEnum'/>
  <part name='amount' type='xsd:int'/>
  <part name='instrument' type='xsd:string'/>
</message>
<message name='estimateMarketOrderOut'>
  <part name='errorCode' type='types:ErrorEnum'/>
  <part name='amount' type='types:Amount'/>
</message>
<message name='getTradedPriceVolumeIn'>
  <part name='instrument' type='xsd:string'/>
  <part name='startDate' nillable='false' type='xsd:string'/>
  <part name='endDate' nillable='false' type='xsd:string'/>
  <part name='precision' nillable='true' type='xsd:int'/>
  <part name='HLOC' nillable='true' type='xsd:int'/>
</message>
<message name='getTradedPriceVolumeOut'>
  <part name='errorCode' type='types:ErrorEnum'/>
  <part name='priceVolumeList' type='types:HLOCPriceVolumeList'/>
</message>
<message name='getRawTradeDataIn'>
  <part name='instrument' type='xsd:string'/>
  <part name='timespan' type='xsd:int'/>
</message>
<message name='getRawTradeDataOut'>
  <part name='errorCode' type='types:ErrorEnum'/>
  <part name='data' type='types:TradeDataList'/>
</message>
<message name='getTerminalListOut'>
  <part name='terminals' nillable='true' type='types:TerminalList'/>
</message>
<message name='getGridListOut'>
  <part name='grids' nillable='true' type='types:GridList'/>
</message>
<message name='getStatisticsIn'>
  <part name='shortCurrency' nillable='true' type='xsd:string'/>
</message>
<message name='getStatisticsOut'>
  <part name='registeredUsers' type='xsd:int'/>
  <part name='volumeTotal' type='xsd:string'/>
  <part name='volume24hours' type='xsd:string'/>
  <part name='volume30days' type='xsd:string'/>
</message>

<portType name='VirWoXPortType'>
  <operation name='getInstruments'>
    <output message='tns:getInstrumentsOut'/>
  </operation>
  <operation name='getBestPrices'>
    <input message='tns:getBestPricesIn'/>
    <output message='tns:getBestPricesOut'/>
  </operation>
  <operation name='getMarketDepth'>
    <input message='tns:getMarketDepthIn'/>
    <output message='tns:getMarketDepthOut'/>
  </operation>
  <operation name='estimateMarketOrder'>
    <input message='tns:estimateMarketOrderIn'/>
    <output message='tns:estimateMarketOrderOut'/>
  </operation>
  <operation name='getTradedPriceVolume'>
    <input message='tns:getTradedPriceVolumeIn'/>
    <output message='tns:getTradedPriceVolumeOut'/>
  </operation>
  <operation name='getRawTradeData'>
    <input message='tns:getRawTradeDataIn'/>
    <output message='tns:getRawTradeDataOut'/>
  </operation>
  <operation name='getTerminalList'>
    <output message='tns:getTerminalListOut'/>
  </operation>
  <operation name='getGridList'>
    <output message='tns:getGridListOut'/>
  </operation>
  <operation name='getStatistics'>
    <input message='tns:getStatisticsIn'/>
    <output message='tns:getStatisticsOut'/>
  </operation>
</portType>

<binding name='VirWoXBinding' type='tns:VirWoXPortType'>
  <soap:binding style='rpc'
    transport='http://schemas.xmlsoap.org/soap/http'/>
  <operation name='getInstruments'>
    <soap:operation soapAction='getInstruments'/>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getBestPrices'>
    <soap:operation soapAction='getBestPrices'/>
    <input>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getMarketDepth'>
    <soap:operation soapAction='getMarketDepth'/>
    <input>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='estimateMarketOrder'>
    <soap:operation soapAction='estimateMarketOrder'/>
    <input>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getTradedPriceVolume'>
    <soap:operation soapAction='getTradedPriceVolume'/>
    <input>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getRawTradeData'>
    <soap:operation soapAction='getRawTradeData'/>
    <input>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </input>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getTerminalList'>
    <soap:operation soapAction='getTerminalList'/>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getGridList'>
    <soap:operation soapAction='getGridList'/>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
  <operation name='getStatistics'>
    <soap:operation soapAction='getStatistics'/>
    <output>
      <soap:body use='encoded' namespace='urn:types'
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
    </output>
  </operation>
</binding>

<service name='VirWoX'>
  <documentation>API documentation at http://api.virwox.com/api/documentation</documentation>
  <port name='VirWoXPortType' binding='tns:VirWoXBinding'>
    <soap:address location='http://api.virwox.com/api/soap.php'/>
  </port>
</service>
</definitions>



