Reporting API SDK
The 360-One Reporting API SDK provides an easy to integrate or download any 360-One reporting. In the following examples, we’ll go over the most common requests made to the Reporting API.
Contents
Notes
The Java SDK communicates with the API by using a HTTP POST with the HttpURLConnection class. It does not have any dependencies outside standard Java classes. The minimum version of Java required is 1.5.
The C# SDK communicates with the API by using a HTTP POST with the HttpWebRequest class. The library was written using Microsoft .NET framework version 4.5, unless otherwise stated in the download above.
Note Be sure to use the LIVE endpoint in a production site – TEST will not contain live reporting data.
Overview
The Reporting API has two environments available for use:
- GatewayUrl.Test The test server uses the test database. It may be used during development, if the certification manager issues test credentials.
- GatewayUrl.Live The live server should be used to pull reports from live merchant accounts.
Batch Summary Example
The Batch Summary is a report that details all transactions batched from a POS device, Payment Gateway, or other product. It represents transactions that have been recieved, but not necessarily funded.
Request
- ReportingSettings settings = new ReportingSettings();
settings.credentials(“username”, “userpass”)
.verbose(true)
.hostUrl(ReportingSettings.URL_LIVE);
Reporting reporting = new Reporting(settings);ReportingRequest request = new ReportingRequest(ReportType.BATCH, ReportMode.DETAIL);
request.setNode(“941000xxxxxx”)
.setStartDate(“11”, “01”, “2012”)
.setEndDate(“11”, “01”, “2012”)
.setResponseFormat(ResponseFormat.XML1);try {
String response = reporting.run(request);
if(reporting.wasSuccessful()) {
// Store response data
}
} catch (MesRuntimeException e) {
e.printStackTrace();
}
When expecting a large amount of transactions, it may be best to make several calls with a narrower date window, than one call with a wide date window.
Output
- <?xml version=“1.0” encoding=“UTF-8” ?>
<Report>
<ReportRow>
<ReportColumn name=“Merchant Id” value=“9410000xxxxx”/>
<ReportColumn name=“DBA Name” value=“TEST ACCOUNT”/>
<ReportColumn name=“Term Num” value=“86”/>
<ReportColumn name=“Batch Num” value=“1”/>
<ReportColumn name=“Batch Date” value=“03/03/2014”/>
<ReportColumn name=“Tran Date” value=“03/03/2014”/>
<ReportColumn name=“Card Type” value=“VS”/>
<ReportColumn name=“Card Number” value=“401288xxxxxx8882”/>
<ReportColumn name=“Reference” value=“562599660”/>
<ReportColumn name=“Purchase Id” value=“Invoice 123456”/>
<ReportColumn name=“Auth Code” value=“04320A”/>
<ReportColumn name=“Entry Mode” value=“SWIPED CVV”/>
<ReportColumn name=“Tran Amount” value=“0.25”/>
<ReportColumn name=“Trident Tran Id” value=“dg52b30c76d13158bfe69b52eea0ae0a”/>
<ReportColumn name=“Client Ref Num” value=“Custom reference number”/>
</ReportRow>
</Report>
This result is in XML due to the setResponseFormat(ResponseFormat.XML1) call.
Settlement Summary Example
The Settlement Summary is a report that details all transactions batched from a POS device, Payment Gateway, or other product. It represents transactions that have been recieved, and will be funded. An example of transactions which will not be funded by 360-One are typically American Express (as the deposit generally comes from AMEX).
Request
- ReportingSettings settings = new ReportingSettings();
settings.credentials(“username”, “userpass”)
.verbose(true)
.hostUrl(ReportingSettings.URL_LIVE);
Reporting reporting = new Reporting(settings);ReportingRequest request = new ReportingRequest(ReportType.SETTLEMENT, ReportMode.DETAIL);
request.setNode(“941000xxxxxx”)
.setStartDate(“01”, “01”, “2014”)
.setEndDate(“04”, “10”, “2014”)
.setResponseFormat(ResponseFormat.XML1);try {
String response = reporting.run(request);
if(reporting.wasSuccessful()) {
// Store response data
}
} catch (MesRuntimeException e) {
e.printStackTrace();
}
When expecting a large amount of transactions, it may be best to make several calls with a narrower date window, than one call with a wide date window.
Output
- <?xml version=“1.0” encoding=“UTF-8” ?>
<Report>
<ReportRow>
<ReportColumn name=“Merchant Id” value=“9410000xxxxx”/>
<ReportColumn name=“DBA Name” value=“TEST ACCOUNT”/>
<ReportColumn name=“Term Num” value=“86”/>
<ReportColumn name=“Batch Num” value=“1”/>
<ReportColumn name=“Batch Date” value=“03/03/2014”/>
<ReportColumn name=“Tran Date” value=“03/03/2014”/>
<ReportColumn name=“Card Type” value=“VS”/>
<ReportColumn name=“Card Number” value=“401288xxxxxx8882”/>
<ReportColumn name=“Reference” value=“562599660”/>
<ReportColumn name=“Purchase Id” value=“Invoice 123456”/>
<ReportColumn name=“Auth Code” value=“04320A”/>
<ReportColumn name=“Entry Mode” value=“SWIPED CVV”/>
<ReportColumn name=“Tran Amount” value=“0.25”/>
<ReportColumn name=“Trident Tran Id” value=“dg52b30c76d13158bfe69b52eea0ae0a”/>
<ReportColumn name=“Client Ref Num” value=“Custom reference number”/>
</ReportRow>
</Report>
Deposit Summary Example
The Deposit Summary is a report that details all activity into and out of the merchant’s bank account. This includes merchant deposits, as well as amounts withdrawn due to fees, or chargebacks.
Request
- ReportingSettings settings = new ReportingSettings();
settings.credentials(“username”, “userpass”)
.verbose(true)
.hostUrl(ReportingSettings.URL_LIVE);
Reporting reporting = new Reporting(settings);ReportingRequest request = new ReportingRequest(ReportType.DEPOSIT, ReportMode.DETAIL);
request.setNode(“941000xxxxxx”)
.setStartDate(“01”, “01”, “2014”)
.setEndDate(“04”, “10”, “2014”)
.setResponseFormat(ResponseFormat.XML1);try {
String response = reporting.run(request);
if(reporting.wasSuccessful()) {
// Store response data
}
} catch (MesRuntimeException e) {
e.printStackTrace();
}
Output
- <?xml version=“1.0” encoding=“UTF-8” ?>
<Report>
<ReportRow>
<ReportColumn name=“Org Id” value=“9410000xxxxx”/>
<ReportColumn name=“Org Name” value=“TEST ACCOUNT”/>
<ReportColumn name=“Date” value=“03/02/2014”/>
<ReportColumn name=“Type” value=“DEBIT”/>
<ReportColumn name=“Amount” value=“-5.67”/>
<ReportColumn name=“Reference” value=“61100609354034”/>
</ReportRow>
<ReportRow>
<ReportColumn name=“Org Id” value=“9410000xxxxx”/>
<ReportColumn name=“Org Name” value=“TEST ACCOUNT”/>
<ReportColumn name=“Date” value=“03/05/2014”/>
<ReportColumn name=“Type” value=“CREDIT”/>
<ReportColumn name=“Amount” value=“0.01”/>
<ReportColumn name=“Reference” value=“61100609409645”/>
</ReportRow>
<ReportRow>
<ReportColumn name=“Org Id” value=“9410000xxxxx”/>
<ReportColumn name=“Org Name” value=“TEST ACCOUNT”/>
<ReportColumn name=“Date” value=“03/05/2014”/>
<ReportColumn name=“Type” value=“CREDIT”/>
<ReportColumn name=“Amount” value=“0.25”/>
<ReportColumn name=“Reference” value=“61100609409644”/>
</ReportRow>
</Report>
In the verbiage above, CREDIT is a deposit to the merchant account, while DEBIT is a withdraw.
Chargeback Adjustments Example
The Chargeback Adjustment report details all of the chargeback activity on a merchant account. Each record represents a dispute that has originated from the cardholder’s issuing bank, and should each be individually handled.
Request
- ReportingSettings settings = new ReportingSettings();
settings.credentials(“username”, “userpass”)
.verbose(true)
.hostUrl(ReportingSettings.URL_LIVE);
Reporting reporting = new Reporting(settings);ReportingRequest request = new ReportingRequest(ReportType.CHARGEBACKADJUSTMENTS, ReportMode.DETAIL);
request.setNode(“941000xxxxxx”)
.setStartDate(“01”, “01”, “2014”)
.setEndDate(“04”, “10”, “2014”)
.setResponseFormat(ResponseFormat.XML1);try {
String response = reporting.run(request);
if(reporting.wasSuccessful()) {
// Store response data
}
} catch (MesRuntimeException e) {
e.printStackTrace();
}
Output
- <?xml version=“1.0” encoding=“UTF-8” ?>
<Report>
<ReportRow>
<ReportColumn name=“Merchant Id” value=“9410000xxxxx”/>
<ReportColumn name=“DBA Name” value=“TEST ACCOUNT “/>
<ReportColumn name=“Control Number” value=“3208057”/>
<ReportColumn name=“Incoming Date” value=“03/26/2014”/>
<ReportColumn name=“Card Number” value=“401288xxxxxx8882”/>
<ReportColumn name=“Reference Number” value=“74332393326005359000535”/>
<ReportColumn name=“Tran Date” value=“11/21/2013”/>
<ReportColumn name=“Tran Amount” value=“-6.0”/>
<ReportColumn name=“Trident Tran ID” value=“55ac1a744be338dfad8f8f35169737a7”/>
<ReportColumn name=“Purchase ID” value=“Invoice123456”/>
<ReportColumn name=“Client Ref Num” value=“Custom Data”/>
<ReportColumn name=“Auth Code” value=“T12345”/>
<ReportColumn name=“Adj Date” value=“04/06/2014-“/>
<ReportColumn name=“Adj Ref Num” value=“00535900053”/>
<ReportColumn name=“Reason” value=“Non-Matching Account Number”/>
<ReportColumn name=“First Time” value=“Y”/>
<ReportColumn name=“Reason Code” value=“77”/>
<ReportColumn name=“CB Ref Num” value=“0”/>
<ReportColumn name=“Terminal ID” value=“”/>
</ReportRow>
</Report>
Each chargeback is unique and should be handled individually by working closely with our chargeback department.
Retrieval Requests Example
The Retrieval Request report details all of the retrieval activity on a merchant account. A retrieval request is an inquiry into a transaction, requesting proof of a transaction, such as a receipt or invoice. A retrieval request does not necessarly indicate a future chargeback, as it’s just an inquiry about the authorization.
Request
- ReportingSettings settings = new ReportingSettings();
settings.credentials(“username”, “userpass”)
.verbose(true)
.hostUrl(ReportingSettings.URL_LIVE);
Reporting reporting = new Reporting(settings);ReportingRequest request = new ReportingRequest(ReportType.RETRIEVAL, ReportMode.DETAIL);
request.setNode(“941000xxxxxx”)
.setStartDate(“01”, “01”, “2014”)
.setEndDate(“04”, “10”, “2014”)
.setResponseFormat(ResponseFormat.XML1);try {
String response = reporting.run(request);
if(reporting.wasSuccessful()) {
// Store response data
}
} catch (MesRuntimeException e) {
e.printStackTrace();
}
Output
- <?xml version=“1.0” encoding=“UTF-8” ?>
<Report>
<ReportRow>
<MerchantId>9410000xxxxxx</MerchantId>
<DBAName>TEST ACCOUNT/DBAName>
<ControlNumber>3270341</ControlNumber>
<IncomingDate>03/08/2014</IncomingDate>
<CardNumber>555566xxxxxx8882</CardNumber>
<ReferenceNumber>25140614037031297285155</ReferenceNumber>
<TranDate>02/05/2014</TranDate>
<TranAmount>79.95</TranAmount>
<DueDate>03/15/2014</DueDate>
<ReasonCode>6342</ReasonCode>
<RetrievalRefNum></RetrievalRefNum>
</ReportRow>
</Report>
A retrieval request will generally automatically turn into a chargeback if it is not responded to, so it is important to be timely with the presentation of the invoice in question.