Payment Methods

What your drivers can collect on arrival, and how YUMBI Gateway gates dispatch on what you declare.

Payment Methods

Most orders reaching you are already paid. Some are not — the customer owes money when the driver arrives. Whether your drivers can take that money decides which orders you are allowed to carry, and YUMBI Gateway enforces it before a delivery is ever offered to you.

Collection types

An order carries at most one amount-due collection type: what the driver has to collect on arrival.

Collection typeThe driver must
cash_on_deliveryTake cash, and carry a float for change
card_on_deliveryTake card payment, and carry a card machine
pay_in_storeNothing — the customer settles at the store
(none)Nothing — the order is fully prepaid

A fully prepaid order carries no collection type. That is the common case, and every provider can carry it. pay_in_store also requires nothing of the driver, but it is still a distinct type because the order is not settled and a brand may not want it out with a third-party courier.

What you declare, and what it does

During onboarding you tell us which collection types your drivers can handle. We store that against your provider record, and it acts as a hard gate:

  • You declare a list → only orders whose collection type is in it, plus prepaid orders, are dispatched to you.
  • You declare an empty list → prepaid orders only. Anything with money outstanding goes elsewhere.
  • You declare nothing → unrestricted. Every order reaches you. Only appropriate if your platform genuinely handles all of them.

An order whose collection type you do not support is refused before the dispatch webhook is sent. You never see it. The channel receives a 422 explaining that the provider does not support that payment method, and decides what to do — usually falling back to the store's own driver.

This is deliberately strict. The failure it prevents is a driver arriving at a customer who owes R105 in cash with no way to take it.

📘

Declare what your API can express, not what your drivers could theoretically do

The gate exists because there must be a field in your API that tells a driver to collect. Plenty of couriers could physically take cash, but if the delivery you create carries no payment-collection instruction, nothing reaches the driver — they arrive expecting a handover and the customer expects to pay. If your drivers can collect but your API cannot say so, you are prepaid-only until it can.

What arrives in the dispatch payload

Every dispatch carries a payment block:

{
  "paid": true,
  "payment_type": "online",
  "net_amount_paid": "105.90",
  "amount_due": "0.0",
  "driver_tip": "0.0"
}
FieldNotes
paidWhether any payment has been recorded against the order
payment_typeWhat the driver is dealing with — see the table below
net_amount_paidDecimal string. What the customer has already settled
amount_dueDecimal string. What the driver must collect on arrival
driver_tipDecimal string. Tip already paid, included in net_amount_paid

payment_type values:

ValueNothing to collectNotes
onlinePaid by card through the channel
voucherSettled by voucher
pay_in_storeThe customer pays the store
cash_on_deliveryCollect cash
card_on_deliveryTake card payment
unpaidNo payment recorded and no collection type stated
❗️

Read amount_due, not paid

paid: true only means some payment exists. An order can carry a partial payment — a deposit, a voucher covering part of the basket — and still owe money on arrival. amount_due is the number to put in front of the driver. paid: false with amount_due: "0.0" is also possible, for an order with no payment rows and nothing outstanding.

Monetary values in this block are decimal strings ("105.90"), not cents. The cents-denominated fields are manifest.total_value_cents, manifest.sub_total_cents, and the unit_price_cents / total_price_cents on each order item.

Tips

driver_tip is a tip the customer has already paid through the channel, and is included in net_amount_paid. It is not something the driver collects.

Whether the tip reaches the driver is between you and the brand — YUMBI Gateway passes the figure through so you can attribute it, but does not settle it. If your platform has a tip field on its delivery model, this is the value for it.

Declaring your capability

Answer two questions during onboarding:

  1. Can your API instruct a driver to collect payment on arrival? If not, you are prepaid-only, and that is a perfectly normal configuration.
  2. If it can, which forms? Cash needs a driver carrying a float; card needs a card machine. They are declared separately because a provider often supports one and not the other.

Being able to collect is a meaningful advantage: it makes you eligible for orders that prepaid-only providers cannot carry, which for some brands is a significant share of their delivery volume.

If your capability changes later — you roll out card machines, or withdraw cash handling — tell us and we update the configuration. It takes effect on the next dispatch; nothing on your side needs to change.

Verification at handover

Separate from payment, and worth mentioning in the same breath because providers often conflate them:

Response fieldEffect
pin_codeA handover PIN shown to the customer, who gives it to the driver
signature_requiredWhether the customer must sign

Both are returned on dispatch, and either can be updated later through a status update if it changes. Send pin_code as a string — a leading zero is significant ("0431").

These are proof-of-handover mechanisms, not payment. A provider can require a PIN on a fully prepaid order, and can collect cash without one.


Did this page help you?