Onboarding

What YUMBI Gateway needs from you, what we give you in return, and how a store gets switched on.

Onboarding

Integrating is mostly a data exchange. This page is the checklist for both sides.

What we need from you

Credentials and endpoints

Notes
Webhook endpoint URLOne HTTPS URL is enough for all four events. Give us separate URLs per event only if you want them. The path is part of the HMAC signing string, so tell us the exact URL.
Staging endpoint URLA non-production endpoint we can test against before go-live.
Inbound signing secretOnly if the status updates you push to us are signed with your own secret — tell us how you sign and we will validate it.

Capabilities

Why we ask
Push or poll?Push is strongly preferred. Tell us if you have no outbound webhook capability, or if it is partial — for example if you can push lifecycle statuses but can only be polled for driver position.
Do you re-send failed webhooks?If you push once and never retry, we queue inbound updates with retries on our side so an unreachable Gateway does not lose one permanently.
Your full status vocabularyEvery status your platform can emit, and what each one means, so we can agree the mapping onto the canonical lifecycle. Include the ones that carry no lifecycle meaning.
Do you model pickup and dropoff as separate legs?It changes the mapping — the same status means different things per leg.
Supported payment collection typesWhich of cash_on_delivery, card_on_delivery and pay_in_store your API can instruct a driver to collect. See Payment Methods.
Driver location reportingWhether you can supply live driver position, and at what frequency.
PIN and signature supportWhether you issue a handover PIN, and whether you can require a signature.
Do you re-dispatch?Whether a failed delivery can get a new delivery id on your side. If so we treat the new id as a fresh attempt and allow the status to reset.
QuotingWhether you have a pricing API. If not, the delivery fee stays whatever the brand charges and we skip the quote call entirely.
Quote validityHow long your prices hold, so expiration is set sensibly.
Rate limitsBoth directions — what you can accept, and what we should not exceed.
Cancellation window and feesWhen you will stop accepting cancellations, and what you charge. Fees are commercial, not part of the API.
Service areaCountries, cities and any radius limits, so brands know where you can be offered.
TimezoneThe timezone your API expects and returns. We send ISO 8601 with explicit offsets; some providers need local time.

Per-store data

This is the part most often forgotten, and nothing works without it.

Notes
Your store identifier, per storeWe store it against each store and send it as provider_store_id on every quote, dispatch and cancellation. If your platform has no per-store concept, say so and we will use external_store_id instead.
Confirmation of store coordinatesWe hold latitude, longitude and address for every store and send them as the pickup point. These are maintained by hand on our side and a bad row looks exactly like an integration bug — worth verifying against your own records at go-live.
Store-level account or contract referencesAnything else your platform needs to attribute a delivery to the right merchant account.

What we give you

Notes
API keyThe shared secret you verify our outbound webhook signatures with. Delivered out of band; never sent in a request.
Client identifierArrives as X-Client-ID on every webhook we send. Constant for your integration.
OAuth client id and secretFor the status updates you push to us. Separate from the API key.
Your provider idArrives as user_id in every webhook envelope.
Gateway and auth base URLsStaging is https://gateway-za.yumbidemo.com with its token endpoint at https://flexible-diamond-18-staging.authkit.app/oauth2/token; production is https://gateway.yumbi.com with https://auth.yumbi.com/oauth2/token.
A staging environmentWired to your staging endpoint, for end-to-end testing before live traffic. Staging credentials are separate from production ones and are issued first.

How a store gets switched on

Configuration is two levels, and both are required:

  1. The provider is enabled for a brand. A brand opts in to you as a delivery option.
  2. The provider is linked to a store, together with your provider_store_id for it. A store can only be linked to a provider its brand has enabled.

A store links to one delivery provider. Switching a store between providers, or running different providers across a brand's estate, is a configuration change on our side with no code change on yours.

Testing before go-live

Work through this in staging, per store, before taking live traffic:

  • A signed webhook verifies, and an unsigned or wrongly signed one is rejected with a 401.
  • A stale X-Timestamp outside your replay window is rejected.
  • A quote returns a fee, and a declined quote returns a non-2xx with a diagnosable body.
  • A dispatch creates exactly one delivery and returns a provider_delivery_id.
  • A repeated dispatch for the same order_guid returns the same delivery id and does not create a second delivery.
  • An OAuth token is obtained, cached, and reused across pushes.
  • A status update reaches YUMBI Gateway and appears against the order.
  • The full lifecycle runs through to delivered, in the right order, with assigned covering the pre-pickup leg.
  • A cancellation succeeds, and one you refuse returns a non-2xx.
  • A cancellation initiated on your side pushes a cancelled status.
  • Location pings arrive as update_type: "location" and do not change the status.
  • A 404 on a status update is retried rather than dropped.
  • An order with an unsupported collection type never reaches you.
  • pin_code survives a leading zero.

Support

When raising a delivery problem with us, quote the order_guid. Every webhook we send you and every response you return is recorded against the order, so we can show you exactly what crossed the wire in both directions. order_delivery_assignment_id identifies a specific dispatch attempt where an order has had more than one.


Did this page help you?