Neo Guide
Neo home

Buying and selling

Payments, delivery, and tracking

How Neo checks payment, arranges delivery safely, and reports the latest status.

Hosted payment lifecycle

Neo initializes a hosted Paystack or Flutterwave checkout from a server-owned order total and stable reference. The browser redirect is not proof of payment. Signed callbacks are durably received and must match provider reference, allowed status, amount, currency, order ID, and order number before confirmation.

Provider or administrator confirmation commits payment/order state with the capture allocation journal. Duplicate callbacks converge on one event and one financial posting. Manual receipt upload is evidence for operations review, not automatic payment confirmation.

Quote, booking, and tracking

Delivery quotes bind provider, service, fee, route, promised window, and expiry. A quote does not book a courier. Booking uses the accepted quote and a stable command key. Tracking callbacks are signature-verified, durable, idempotent, and synchronize legal shipment/order transitions.

manual explicitly disables automated courier calls. Sandbox logistics may exercise booking and tracking state without contacting a courier; it is not live fulfilment.

Combined progression

flowchart LR
  Order[Awaiting payment] --> Hosted[Hosted checkout]
  Hosted --> Callback[Signed payment callback]
  Callback --> Paid[Paid order and capture journal]
  Paid --> Quote[Current courier quote]
  Quote --> Book[Outbox booking command]
  Book --> Track[Signed tracking callbacks]
  Track --> Delivered[Delivered order]
  Delivered --> Complete[Completion and settlement release]

If the diagram does not render, its Mermaid source remains readable above.

Every arrow is conditional. Disabled providers, missing certification, expired quotes, invalid callbacks, disputes, risk holds, or reconciliation divergence stop forward progress.

Failure and reconciliation

Known transient failures use bounded retry. Unknown checkout, refund, booking, or transfer outcomes enter provider-specific reconciliation. A provider success is never inferred from a timeout. General live refund and courier-booking availability remains gated by exact-target evidence.

  • src/payments.ts
  • src/shipments.ts
  • src/provider-runtime.ts
  • test/payments.test.ts
  • test/shipments.test.ts