Transaction
Transaction: Submit For Settlement
Transaction: Sale
, then you
will have to explicitly submit the transaction for settlement. Refer to the
Transaction response object for more
information.
- Java
Result<transaction> result = gateway.transaction().submitForSettlement("the_transaction_id");
if (result.isSuccess()) {
Transaction settledTransaction = result.getTarget();
} else {
System.out.println(result.getErrors());
}
Arguments
amount
BigDecimalAn amount to submit for settlement. Must be greater than 0. You can't settle more than the authorized amount unless your industry and processor support settlement adjustment (settling a certain percentage over the authorized amount); contact us for details.
If you settle an amount that is less than what was authorized, the transaction object will return the amount settled.
transactionId
required, stringauthorized
for settlement.Additional Parameters
Dynamic descriptors are not enabled on all accounts by default. If you receive a validation error of 92203
or if your dynamic descriptors are not displaying as expected, please contact us.
Dynamic descriptors are sent on a per-transaction basis and define what will appear on your customers' credit card statements for a specific purchase. The clearer the description of your product, the less likely customers will issue chargebacks due to confusion or non-recognition.
See the dynamic descriptor example for additional information.
.discountAmount(…)
BigDecimalA Level 3 field that specifies the discount amount that was included in the total transaction amount. It can't be negative, and it does not add to the total transaction amount. This Braintree line-item field is not used by PayPal.
The line items for this transaction. It can include up to 249 line items. If your merchant account has been configured for Level 3 processing this field will be passed to the processor on your behalf.
.commodityCode(…)
string.description(…)
string.discountAmount(…)
BigDecimal.kind(…)
stringIndicates whether the line item is a debit (sale) or credit (refund) to the customer. Accepted values:
"debit"
"credit"
.name(…)
string.productCode(…)
string.quantity(…)
BigDecimal.totalAmount(…)
BigDecimal.unitAmount(…)
BigDecimal.unitOfMeasure(…)
string.unitTaxAmount(…)
BigDecimal.upcCode(…)
string.upcType(…)
stringUPC type for the item. If specified, you must also provide the UPC code. Accepted values:
"UPC-A"
"UPC-B"
"UPC-C"
"UPC-D"
"UPC-E"
"UPC-2"
"UPC-5"
.url(…)
string.orderId(…)
string.purchaseOrderNumber(…)
stringA Level 2 field that can be used to pass a purchase order identification value of up to 12 ASCII characters for AIB and 17 ASCII characters for all other processors.
.company(…)
string.countryCodeAlpha2(…)
stringThe ISO 3166-1 alpha-2 country code specified in an address. The gateway only accepts specific alpha-2 values.
.countryCodeAlpha3(…)
stringThe ISO 3166-1 alpha-3 country code specified in an address. The gateway only accepts specific alpha-3 values.
.countryCodeNumeric(…)
stringThe ISO 3166-1 numeric country code specified in an address. The gateway only accepts specific numeric values.
.countryName(…)
stringThe country name specified in an address. We only accept specific country names.
.extendedAddress(…)
string.firstName(…)
string.countryCode(…)
string.nationalNumber(…)
string.lastName(…)
string.locality(…)
string.phoneNumber(…)
stringDeprecated.
We recommend using international_phone
. This functionality still exists in the gateway but is no longer documented. This parameter will be removed in the future.
.postalCode(…)
string.region(…)
string.streetAddress(…)
string.shippingAddressId(…)
string.shippingAmount(…)
BigDecimalA Level 3 field that specifies the shipping cost on the entire transaction. It can't be negative, and it does not add to the total transaction amount.
.shippingTaxAmount(…)
BigDecimalA Level 3 field that specifies the amount of tax that was charged on the . The value can't be negative, and in most cases, it must be greater than zero if the shipping amount is greater than zero. It does not add to the total transaction amount.
.shipsFromPostalCode(…)
stringA Level 3 field that specifies the postal code of the shipping location.
.taxAmount(…)
BigDecimalA Level 2 field that specifies the amount of tax that was included in the total transaction amount. The value can't be negative, and in most cases, it must be greater than zero in order to qualify for lower interchange rates. It does not add to the total transaction amount.
.taxExempt(…)
booleanA Level 2 field that indicates whether or not the transaction should be considered eligible for tax exemption. This does not affect the total transaction amount.
Examples
Specifying settlement amount
If you want to settle for an amount that is different from the total authorization amount, you can
specify the amount to settle. If you do not specify, the entire amount will be settled. You can only
submit for settlement for an amount that is less than the total authorization amount one time. To
submit more than once, you will need to use multiple partial settlements; this method is available
for
PayPal and
Venmo transactions, and
some credit card transactions
for select merchants.
Authorization adjustments
For eligible merchants,
authorization adjustments
occur automatically when you submit for settlement for an amount greater or less than the original
authorized amount. Each adjustment attempt is recorded as an
adjustment detail
, which is returned on the
transaction response object. Adjustment
details allow you to determine decline responses and track the overall success rate of auth
adjustments. You can account for real-time decline responses in the form of
validation errors. If you have questions regarding auth adjustment eligibility or functionality, please
contact us for details.
Availability
Authorization adjustments are available for select merchants and processors.
See our support articles for details.- Java
Result<transaction> result = gateway.transaction().submitForSettlement(
"the_transaction_id",
new BigDecimal("35.00")
);
Specifying Level 2 and 3 data
Availability
Level 2 and 3 processing via submit for settlement requires internal approval. Please
contact us if you’re interested in
this functionality.
See our Level 2 and 3 processing overview
for more details.
- Java
TransactionRequest request = new TransactionRequest()
.purchaseOrderNumber("12345")
.taxAmount(new BigDecimal("5.00"))
.shippingAmount(new BigDecimal("1.00"))
.discountAmount(new BigDecimal("0.00"))
.shipsFromPostalCode("60654")
.lineItem()
.name("Product")
.kind(TransactionLineItem.Kind.DEBIT)
.quantity(new BigDecimal("10.0000"))
.unitAmount(new BigDecimal("9.5000"))
.unitOfMeasure("unit")
.totalAmount(new BigDecimal("95.00"))
.taxAmount(new BigDecimal("5.00"))
.discountAmount(new BigDecimal("0.00"))
.productCode("54321")
.commodityCode("98765")
.done();
Result<transaction> result = gateway.transaction().submitForSettlement("transactionId", request);
if (result.isSuccess()) {
// See result.getTarget for details
} else {
// Handle errors
}
Shipping address information
In some cases, the shipping address information cannot be determined until the transaction is ready
to be submitted for settlement. This functionality allows you to apply shipping address fields when
submitting a transaction for settlement instead of specifying them in the transaction sale call. If
shipping address parameters are applied via submit for settlement, they will override any
corresponding shipping address parameters applied on the sale. We recommend using either
transaction.sale or transaction.submit_for_settlement to send shipping address parameters, but not
both at the same time. Shipping address includes the Level 3 fields
shipping.postalCode and
shipping.countryCodeAlpha3.
Availability
Sending shipping address fields via submit for settlement requires internal approval. Please
contact us if you're interested in
this functionality.
Specifying order ID
You can pass additional information about a transaction by adding the
orderId when submitting the transaction for
settlement.
- Java
TransactionRequest request = new TransactionRequest()
.orderId("orderId");
Result<transaction> result = gateway.transaction().submitForSettlement("transactionId", request);
if (result.isSuccess()) {
// See result.getTarget for details
} else {
// Handle errors
}