Local Payment Methods

Pay Upon Invoice

OverviewAnchorIcon

Availability
Pay Upon Invoice is currently in limited release and is only available to pilot merchants in Germany. If you want to participate in the pilot, please contact us.
Pay upon Invoice is an invoice payment method in Germany. It's a local buy now, pay later payment method that allows the buyer to place an order, receive the goods, try them, verify they are in good order, and then pay the invoice within 30 days. No PayPal account is needed for the buyer to use Pay upon Invoice. Braintree/PayPal has partnered with Ratepay to provide this service. This payment method is also called Rechnungskauf mit Ratepay in German.

EligibilityAnchorIcon

Important
When adding Pay upon Invoice with Ratepay/Rechnungskauf mit Ratepay as a payment option to your checkout integration, you must acknowledge and accept these Terms and understand they are part of the PayPal User Agreement.
Payment typeBuyer countriesSeller countriesCurrency codesCustomer transaction limits
`pay_upon_invoice`GermanyGermany`EUR`Min: 5.00 `EUR`, Max: 2500.00 `EUR`
  • This integration is available only in Germany to eligible merchants. The only supported currency is Euros.
  • You must sell goods in the B2C model only.
  • You must ship orders within seven days after the transaction.
  • You must be approved to accept transactions using this payment method. PayPal will ask you to enter a valid VAT ID Number as per EU regulations. Without a valid VAT ID for your business, Braintree/PayPal is required to collect additional VAT as applicable on Braintree/PayPal fees.
  • Request approval to enable Pay upon Invoice by contacting a member of the Braintree support team.

How It WorksAnchorIcon

Braintree/PayPal facilitates the interaction between you and Ratepay:
  1. Braintree/PayPal sends the buyer information to Ratepay for risk assessment. Depending on the result, Ratepay will send the buyer payment instructions or a rejection notice.
  2. You are funded immediately when the buyer successfully completes the checkout process with the Pay upon Invoice method. The buyer pays Ratepay instead of you. Ratepay is responsible for following up with the buyer to ensure the payment is made.
  3. You must inform the buyer that they have 30 days to pay Ratepay via bank transfer.
  4. Braintree/PayPal may contact you in case a buyer has opened a dispute with Ratepay. You are required to respond to these inquiries.
  5. Buyer receives an invoice with cart details and Ratepay's payment instruction details, including the payment reference number, that are returned in the API response. Always use the payment instructions details provided on a per transaction basis to ensure accuracy. In the invoice, instruct the buyer to pay only with Ratepay.
  6. Buyer pays Ratepay by logging into their bank account and making a bank transfer. If you have a simplified integration, you are obliged to ship the order within 7 calendar days.
  7. If the buyer does not pay within the due date, the buyer is subject to dunning fees charged by Ratepay. There is no action required from you during the follow-up and dunning process.
Note
Ensure to use PayPal credentials for Onboarding, Disputes handling, Providing Shipment information, Funds settlement and Reports.

Dispute handlingAnchorIcon

Buyers can open a dispute with Ratepay. You must respond within 10 business days with evidence, either through the PayPal Resolution Center or with the Disputes API. If you don't respond within the timeframe, you're subject to an automatic reversal of the disputed funds. When responding to disputes, you must, depending on the dispute type:
  • Provide the carrier name and shipping tracking number. You need these to respond to an "Item Not Received" dispute.
  • Provide the invoice you sent to the buyer as part of the evidence.
  • In certain cases, additional written explanation might be required. For example, if a buyer has returned the item and claims no refund was received.
  • Retain the proof of shipment and delivery for at least 180 days from the time of order placement. There might be instances when you're asked for this evidence after 90 days of order placement for Ratepay to legally defend a buyer-defaulted transaction. If you don't provide this evidence, you're subject to an automatic reversal of the disputed funds.
Carrier companies delete tracking information after 90 days, so make sure you have an image or PDF copy to respond to the dispute and avoid the reversal of funds.

Provide shipment informationAnchorIcon

As soon as a shipment is made, send tracking information to PayPal. Include the tracking ID and carrier name through either the:
  • PayPal Add Tracking API. Send shipment tracking numbers for all Rechnungskauf mit Ratepay transactions. Set notify_buyer to false for all Pay upon Invoice transactions.
  • Transaction details page in your PayPal account.
Providing this information to PayPal can help you respond to dispute cases later. Especially in older cases where you can't get tracking information from your carrier.

VAT statementsAnchorIcon

You can access monthly VAT Statements through your PayPal account. These statements reflect a summary of VAT collected by PayPal for any fees charged by PayPal. You can use these statements to claim your tax credits or self-assessment of VAT charges.

ConfigurationAnchorIcon

  • Create, verify, and link your PayPal business account in the Braintree Control Panel. In order to process Local Payment Methods, you need to have a valid PayPal business account. It is required for onboarding/provisioning, funds movement, reporting, and viewing/responding to disputes.
    • For direct merchants, you also need to onboard the linked PayPal account using the following links:

FraudNet integrationAnchorIcon

FraudNet is a PayPal-developed, JavaScript library embedded into a merchant's web page to collect browser-based data to help reduce fraud. Upon checkout, data elements are sent to PayPal Risk Services for fraud and risk assessment. FraudNet is for desktop browsers only. Data collected by FraudNet is used for risk analysis and authentication. PayPal does not share FraudNet data with third parties for their own independent benefit. Client SDK will automatically add FraudNet library integration to the merchant's webpage once braintree.dataCollector entity is gets created. However data collector component itself still require a merchant to follow integration steps to be able to use it on a page. Please refer to the data collector component of Client SDK for more information.

Invoke Pay Upon InvoiceAnchorIcon

  • You must invoke the startPayment method for preprocessing and result handling.
  • The startPayment method requires the correlationId parameter. The example below includes how to retrieve the correlationId from the data collector component.
  1. Callback
  2. Promise
// Create a client.
braintree.client.create({
    authorization: CLIENT_AUTHORIZATION
}, function (clientErr, clientInstance) {
    // Stop if there was a problem creating the client.
    // This could happen if there is a network error or if the authorization
    // is invalid.
    if (clientErr) {
        console.error('Error creating client:', clientErr);
        return;
    }
    // Create a data collector component.
braintree.dataCollector.create({
        client: clientInstance,
        paypal: true,
    }, function (dataCollectorErr, dataCollectorInstance) {
        // Stop if there was a problem creating the data collector component.
        // This could happen if there was a network error or if it's incorrectly
        // configured.
        if (dataCollectorErr) {
            console.error('Error creating data collector:', dataCollectorErr);
            return;
        }
        // Create a local payment component.
braintree.localPayment.create({
            client: clientInstance,
        }, function (localPaymentErr, localPaymentInstance) {
            // Stop if there was a problem creating the local payment component.
            // This could happen if there was a network error or if it's incorrectly
            // configured.
            if (localPaymentErr) {
                console.error('Error creating local payment:', localPaymentErr);
                return;
            }
            var correlationId = dataCollectorInstance.rawDeviceData.correlation_id;
            var puiButton = document.getElementById('pui-button');
            puiButton.addEventListener('click', function () {
                // Invoke PUI...
                localPaymentInstance.startPayment({
                    paymentType: 'pay_upon_invoice',
                    amount: '100.00',
                    currencyCode: 'EUR',
                    givenName: 'Max',
                    surname: 'Mustermann',
                    address: { // This is used as the shipping address.
                        streetAddress: 'Taunusanlage 12',
                        locality: 'Frankfurt',
                        postalCode: '60325',
                        countryCode: 'DE',
                    },
                    // PUI specific parameters
                    billingAddress: {
                        streetAddress: 'Schönhauser Allee 84',
                        locality: 'Berlin',
                        postalCode: '10439',
                        countryCode: 'DE'
                    },
                    birthDate: '1990-01-01',
                    email: 'buyer@example.com',
                    locale: 'en-DE',
                    customerServiceInstructions: 'Customer service phone is +49 6912345678.',
                    lineItems: [{
                        category: 'PHYSICAL_GOODS',
                        name: 'Basketball Shoes',
                        quantity: '1',
                        unitAmount: '81.00',
                        unitTaxAmount: '19.00',
                    }],
                    phone: '6912345678',
                    phoneCountryCode: '49',
                    correlationId: correlationId,
                    onPaymentStart: function (data) {
                        // NOTE: It is critical here to store data.paymentId on your server
                        // so it can be mapped to a webhook sent by Braintree once the
                        // buyer completes their payment.
                        console.log('Payment ID:', data.paymentId);
                    },
                }, function (startPaymentError) {
                    // Handle any error calling startPayment
                    console.error('Error!', startPaymentError);
                });
            });
        });
    });
});
When calling startPayment, the following parameters are required for the pay_upon_invoice payment type:
  • address
  • amount
  • billingAddress
  • birthDate
  • correlationId
  • currencyCode
  • customerServiceInstructions
  • email
  • givenName
  • lineItems
  • locale
  • onPaymentStart
  • paymentType
  • phone
  • phoneCountryCode
  • surname

Capturing Pay Upon Invoice TransactionsAnchorIcon

There is no capture call for Pay Upon Invoice transactions; Braintree will associate a transaction on behalf of the merchant once we receive confirmation that the invoice has been confirmed.

Configure webhooksAnchorIcon

A webhook integration is required for Pay Upon Invoice. Webhooks serve as confirmation of a successful transaction based on an invoice as well as notification of a rejected invoice approval. See the webhooks guide for a general overview on how to configure webhooks. Below is an example of a Local Payment funded webhook for when the payment has been approved by RatePay and a transaction is created:
  1. JSON
{
  "local_payment_funded": {
    "payment_id": "the_payment_id",
    "payment_context_id": "the_payment_context_id",
    "transaction": {
      "id": "the_transaction_id",
      "amount": 1.00,
      "currency_iso_code": "EUR",
      "created_at": "2022-03-07",
      "order_id": "the_order_id",
      "status": "settled"
    }
  }
}
Below is an example of a Local Payment expired webhook for when the payment has been rejected:
  1. JSON
{
  "local_payment_expired": {
    "payment_id": "the_payment_id",
    "payment_context_id": "the_payment_context_id"
  }
}
See the Local Payment Method webhooks reference for details on the exact content of the Local Payment Method completed notification.

If you accept cookies, we’ll use them to improve and customize your experience and enable our partners to show you personalized PayPal ads when you visit other sites. Manage cookies and learn more