Skip to content
Advertisement

Get fee amount from Braintree Transaction.search()

Is it possible to get the Braintree fee amount while searching for transactions using Transaction.search() method? I specifically use Braintree Node.js SDK API, so when I call the method:

const gateway = braintree.connect({
    environment: braintree.Environment.Production,
    merchantId : process.env.BRAINTREE_merchantId,
    publicKey  : process.env.BRAINTREE_publicKey,
    privateKey : process.env.BRAINTREE_privateKey,
});

// start and end are well formatted dates, irrelevant here
const stream = gateway.transaction.search((search) => {
    search.createdAt().between(start, end)
});

let result = [];

stream.on("data", (transaction) => {
    result.push(transaction);
});
stream.on("end", () => {

    console.log(result[0]);

});
stream.on("error", reject);
stream.resume();

My console.log(result[0]) shows pretty big (160 lines of code) single transaction object, where transaction.serviceFeeAmount: null.

console.log({
  "id": "1egncjr5",
  "status": "settled",
  "type": "sale",
  "currencyIsoCode": "EUR",
  "amount": "799.00",
  "merchantAccountId": "mycompanyEUR",
  "subMerchantAccountId": null,
  "masterMerchantAccountId": null,
  "orderId": "54144",
  "createdAt": "2018-03-07T08:55:09Z",
  "updatedAt": "2018-03-07T19:41:10Z",
  "customer": {
    "id": null,
    "firstName": null,
    "lastName": null,
    "company": "Kunlabora NV",
    "email": "client@email.com",
    "website": null,
    "phone": null,
    "fax": null
  },
  "billing": {
    "id": null,
    "firstName": null,
    "lastName": null,
    "company": "Kunlabora NV",
    "streetAddress": "Veldkant 33 A",
    "extendedAddress": null,
    "locality": "Kontich",
    "region": null,
    "postalCode": "2550",
    "countryName": "Belgium",
    "countryCodeAlpha2": "BE",
    "countryCodeAlpha3": "BEL",
    "countryCodeNumeric": "056"
  },
  "refundId": null,
  "refundIds": [],
  "refundedTransactionId": null,
  "partialSettlementTransactionIds": [],
  "authorizedTransactionId": null,
  "settlementBatchId": "2018-03-08_mycompanyEUR_ecwhvhcf",
  "shipping": {
    "id": null,
    "firstName": null,
    "lastName": null,
    "company": null,
    "streetAddress": null,
    "extendedAddress": null,
    "locality": null,
    "region": null,
    "postalCode": null,
    "countryName": null,
    "countryCodeAlpha2": null,
    "countryCodeAlpha3": null,
    "countryCodeNumeric": null
  },
  "customFields": "",
  "avsErrorResponseCode": null,
  "avsPostalCodeResponseCode": "U",
  "avsStreetAddressResponseCode": "U",
  "cvvResponseCode": "M",
  "gatewayRejectionReason": null,
  "processorAuthorizationCode": "735709",
  "processorResponseCode": "1000",
  "processorResponseText": "Approved",
  "additionalProcessorResponse": null,
  "voiceReferralNumber": "",
  "purchaseOrderNumber": null,
  "taxAmount": "0.00",
  "taxExempt": false,
  "creditCard": {
    "token": null,
    "bin": "CENSORED",
    "last4": "CENSODER",
    "cardType": "MasterCard",
    "expirationMonth": "CENSORED",
    "expirationYear": "CENSORED",
    "customerLocation": "CENSORED",
    "cardholderName": "",
    "imageUrl": "https://assets.braintreegateway.com/payment_method_logo/mastercard.png?environment=production",
    "prepaid": "No",
    "healthcare": "No",
    "debit": "No",
    "durbinRegulated": "No",
    "commercial": "No",
    "payroll": "No",
    "issuingBank": "BNP PARIBAS FORTIS",
    "countryOfIssuance": "BEL",
    "productId": "MCB",
    "uniqueNumberIdentifier": null,
    "venmoSdk": false,
    "maskedNumber": "CENSORED",
    "expirationDate": "04/2020"
  },
  "statusHistory": [
    {
      "timestamp": "2018-03-07T08:55:10Z",
      "status": "authorized",
      "amount": "799.00",
      "user": "office@mycompany.com",
      "transactionSource": "api"
    },
    {
      "timestamp": "2018-03-07T08:55:10Z",
      "status": "submitted_for_settlement",
      "amount": "799.00",
      "user": "office@mycompany.com",
      "transactionSource": "api"
    },
    {
      "timestamp": "2018-03-07T19:41:10Z",
      "status": "settled",
      "amount": "799.00",
      "user": null,
      "transactionSource": ""
    }
  ],
  "planId": null,
  "subscriptionId": null,
  "subscription": {
    "billingPeriodEndDate": null,
    "billingPeriodStartDate": null
  },
  "addOns": [],
  "discounts": [],
  "descriptor": {
    "name": null,
    "phone": null,
    "url": null
  },
  "recurring": false,
  "channel": "woocommerce_bt",
  "serviceFeeAmount": null,
  "escrowStatus": null,
  "disbursementDetails": {
    "disbursementDate": null,
    "settlementAmount": null,
    "settlementCurrencyIsoCode": null,
    "settlementCurrencyExchangeRate": null,
    "fundsHeld": null,
    "success": null
  },
  "disputes": [],
  "authorizationAdjustments": [],
  "paymentInstrumentType": "credit_card",
  "processorSettlementResponseCode": "",
  "processorSettlementResponseText": "",
  "threeDSecureInfo": null,
  "shipsFromPostalCode": null,
  "shippingAmount": null,
  "discountAmount": null,
  "paypalAccount": {},
  "coinbaseAccount": {},
  "applePayCard": {},
  "androidPayCard": {},
  "visaCheckoutCard": {},
  "masterpassCard": {}
})

Question: How do I get the transaction fee here?

Advertisement

Answer

This is the answer I received from Braintree support team:


Unfortunately no it is not possible to search for the Braintree fee amount using the API at this time (meaning 14/05/2018).

You can calculate the fees for individual transactions by performing an Advanced Transaction Search.

  1. Log into the Control Panel
  2. Under Advanced Search, click Transactions
  3. Uncheck the box next to Creation date range
  4. Check the box next to Disbursed date range
  5. Choose your desired date range
  6. Click Search
  7. On the results page, click Download
  8. Open the CSV file in the spreadsheet program of your choice

From here, you can create additional columns for your transaction fees. To find your specific transaction fees, look at the Pricing Schedule on your statement. Make sure to round down, and then apply the fees to your individual transactions.


So it looks like I am going to implement some PhantomJS module to do just that.

Advertisement